Algorithm 找到重新组合的m个给定集合的最小nr的最快方法包括单独的m+;1套

Algorithm 找到重新组合的m个给定集合的最小nr的最快方法包括单独的m+;1套,algorithm,data-structures,greedy,Algorithm,Data Structures,Greedy,以下是一个实际例子: 假设对于m=4: // the sets for reuniting Set1 = { 5 , 1 , 2 } Set2 = { 2 , 6 , 3 } Set3 = { 7 , 8 , 4 } Set4 = { 4 , 9 , 10} // the set I need to form Set m+1: Set5 = { 1 , 2 , 3 , 4 } 我必须找到一组索引,例如a={1,2,3},以便U(Seti)包括Set5,其中I是a的一部分。A的基数必须最小。如

以下是一个实际例子:

假设对于
m=4

// the sets for reuniting
Set1 = { 5 , 1 , 2 }
Set2 = { 2 , 6 , 3 }
Set3 = { 7 , 8 , 4 }
Set4 = { 4 , 9 , 10}

// the set I need to form
Set m+1: Set5 = { 1 , 2 , 3 , 4 }

我必须找到一组索引,例如
a={1,2,3}
,以便
U(Seti)
包括
Set5
,其中
I
a
的一部分。
A
的基数必须最小。

如果我正确理解了这个问题,下面是一个伪代码,它返回集合5的索引:

setTmp = set5
A = {}
foreach i:
  if (seti intersect setTmp) is not empty then
    setTmp = setTmp  \ setI
    A.add(i)
return A

请注意,这是一种贪婪的方法,如果我正确理解了你的问题,它不能保证a是最小的

这是一个NP难问题


因此,不存在既最优又贪婪的算法。检查这篇文章,它展示了一种贪婪的次优方法。

真的很难理解,问题是什么?我一个字都不懂这个例子。他有一个集合F和集合s的族。他想找到F-G的子族,使得| G |最小,s是G中集合和的子集。这个返回一个覆盖集合5的族,但不一定是最小的。@soulcheck你是对的,我只是在帖子上加了一句,如果它不能保证A是最小的,那么它就不是问题的答案。这是一个想法。。。欢迎你推荐一个更好的。是的,这就是问题所在。谢谢你的链接,但贪婪算法似乎有一个相当大的复杂性,我希望有一个创新的想法更快的东西。