最大非重叠子集?

时间:2012-10-19 10:00:07

标签: algorithm

给定100个(可能交叉的)100个不同项的子集,可以选择的最大子集数是多少,这样它们就不会重叠。

这样做的一种方法是:

for i in 100 downto 0
   foreach choice C of (100 choose i) subsets:
      if (no two elements of C overlap)
          return i;

但显然这太慢了。有多项式时间解决方案吗?

1 个答案:

答案 0 :(得分:2)

这是Set packing,这是一个经典的NP完全问题。没有多项式时间解决方案。