假设我们有一个有限集 S 和一个 S 的子集列表。然后,集合打包问题询问列表中的一些 k 子集是否成对不相交。该问题的优化版本,最大集打包,要求列表中成对不相交集的最大数量。
http://en.wikipedia.org/wiki/Set_packing
所以让S = {1,2,3,4,5,6,7,8,9,10}
and `Sa = {1,2,3,4}`
and `Sb = {4,5,6}`
and `Sc = {5,6,7,8}`
and `Sd = {9,10}`
则成对不相交集的最大数量为 3 ( Sa, Sc, Sd )
我找不到任何有关所涉及算法的文章。你能解释一下吗?
我的做法:
根据大小对集合进行排序。从最小尺寸的集合开始。如果下一个集合中没有元素与当前集合相交,那么我们将集合合并并增加最大集合的计数。这听起来不错吗?有更好的想法吗?