给定n组整数,如何最大化非重叠集的数量

时间:2016-02-01 16:47:47

标签: algorithm data-structures set np-hard

给定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 整数。

2 个答案:

答案 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},并且幸运的是其余四组不重叠。