给定n组整数,如何最大化非重叠集的数量?
例如,让给定的sets
为
{1,2,3}
{1,4,5}
{6,7,8}
{2,3}
{8,9}
{9}
然后答案是4
,
{1,4,5}, {6,7,8}, {2,3}, {9}
{1,2,3}
和{1,4,5}
不能包含非重叠集,因为1在两个集合中都很常见。这是NP听到的问题吗?如果有一个有效的解决方案,我会期待一些细节。
[N.B。] 输入数量最多可达 1000 ,每组包含 1000 整数。
答案 0 :(得分:4)
这是一个最大独立集问题,其中您的集对应于节点,并且与共享至少一个元素的集对应的节点在它们之间具有边缘。它是NP-Hard,也难以接近常数因子。
您仍然可以尝试解决它,例如使用整数线性编程:
maximize: sum x[i]
for each pair of sets (i,j) that overlap: x[i] + x[j] <= 1
x[i]
是一个布尔值,表示第i组是否是您正在寻找的MIS的一部分。
答案 1 :(得分:0)
在这种情况下答案很简单:假设没有设置为空,你总能找到一个最大集合,其中没有集合是原始集合之一的超集 - 因为非空集合及其超集或重叠而不能两者都在最大集合中,并且超集可以用子集替换而不会产生任何重叠。
这里,可以排除{1,2,3}和{8,9},并且幸运的是其余四组不重叠。