从集合中删除不良数字的高效算法

时间:2011-02-26 22:03:23

标签: algorithm computer-science

给出了许多有限的整数集,例如:

A = {1,2,3}
B = {2,3,4}
C = {3,4,5}

也是一个数字,例如6.问题是通过从每组中选择一个数字,从集合中确定不能用于求和的数字6。例如,A中的1有效,因为1 + 2 + 3 = 6(2来自B,3来自C)。 C中的5是无效的,因为你不能使用5加总到6(你总是得到至少1 + 2 + 5 = 8)。

你怎么能有效地做到这一点?

1 个答案:

答案 0 :(得分:4)

我假设3套只是一个例子而实际的套数不固定

假设我们有m个集合,n个数字总和最大可能总和S。 (在您的示例中m = 3n = 9S = 12)。

然后询问是否可以使用集合t中的数字s来实现和x等同于以下内容:其他m - 1可以设置(除了集s 1}})加起来为x - t

此问题具有复杂性O(n*S)的伪多项式解,非常类似于subset sum problem

因此,您可以针对m - 1集合的每个组合解决此问题,它会给您O(n*S*m)复杂性。