从多个集合中找到元素的最佳组合

时间:2017-10-04 16:51:23

标签: algorithm combinations

我有几组配对:

a: ([1, 2], [4,5])
b: ([1, 3])
c: ([4, 7], [1, 8])
d: ([9, 7], [1, 5])
...

没有两对是相同的,并且没有对的元素是相同的。每组可以包含许多对。元素数量很少(大约200个)。

从每一组我拿一对。现在,我想以这样的方式采取对,即元素的数量尽可能小。

问题太大,无法尝试每种组合,是否有任何算法或启发式方法可以帮助我找到最佳(或接近猜测)?

1 个答案:

答案 0 :(得分:0)

问题有一个明确的NP完全感觉。所以这里有两种贪婪的方法可以产生合理的近似答案。要想出哪个更好,你应该实现它们并进行比较。

第一个是自下而上。如果每个集合中选择了一个值,则为2赋予一个值;如果(n+1)/n部分从中选择了n个,则为1/n。在每一轮中,为每个元素赋予一个被选中的值,该值是添加它的量的总和增加所有集合的值。在回合中选择具有最高值的元素,然后更新所有集合的值,更新所有剩余元素的值,然后继续。

这会选择看起来像是在覆盖所有集合方面取得进展的元素。

第二个是自上而下。从选定的所有元素开始,并为每个集合赋值n,其中cin是所选对的数量。给定集合中所有对所需的元素将放入最终集合中。在剩下的元素中,找到一个增加至少值的元素,如果它被删除,并删除它。

我们的想法是,我们从一个太大的封面开始,并重复删除那个对于覆盖所有集合而言最不重要的封面。我们剩下的东西希望是最小的。