固定大小设置为包含给定集的最大数量

时间:2014-06-08 09:44:15

标签: algorithm set

我有大约1000套尺寸< = 5,包含数字1到100.

{1}, {4}, {1,3}, {3,5,6}, {4,5,6,7}, {5,25,42,67,100} ... 

是否可以找到一组包含最大给定集数量的20?

检查每个100!/(80!*20!)集合效率低下。

1 个答案:

答案 0 :(得分:1)

我不太确定这是NP完整的。

考虑相关问题,我们获得每组x的奖励,但必须为我们想要允许的每个数字支付y的价格。 (如果已经支付了所有包含的数字,则该套装仅支付奖励。)

您可以使用max flow algorithm解决此类问题:

  1. 设置源节点
  2. 设置目标节点
  3. 为每个集合设置节点
  4. 为每个号码设置节点
  5. 从源添加边缘到容量为x
  6. 的每个集合
  7. 从每个数字添加边缘到容量为y的dest
  8. 对于集合中的每个数字a,将s中的边缘添加到具有无限容量的a
  9. 解决此图表上的最大流量问题(从源节点到目标节点)找到最小切割成本c。

    我们将支付的净金额为N.x-c(其中N是套数)。

    如果我们可以选择y(例如通过二分法)使得我们已经精确选择了20个数字,那么我们已经设法解决了具有20个数字的最大数量的集合。