6SUM:给定n个整数的集合S,是否有一个S的子集,恰好有6个元素总和为0?如何做得比O(n ^ 3)好?

时间:2011-03-18 13:12:15

标签: algorithm sum

我已经想到了这个简单的算法来解决使用O(n ^ 3)时间和空间的6SUM问题: 生成所有三元组并将它们放在哈希表中,其中键是三元组的总和。然后迭代哈希表的键:对于每个键k1,查看是否存在另一个键k2,使得k2 = S-k1

什么是更有效的算法?这不是一个家庭作业问题。

1 个答案:

答案 0 :(得分:4)

在最坏的情况下,你的算法是Omega(n ^ 6),在一般情况下它只是O(n ^ 3)。您忽略了哈希表冲突的可能性。不过,您可以使用平衡树来使其为O(n ^ 3 logn)。

此外,这是P,因为有一个简单的多项式时间算法来检查6个数字的每个可能的组合,所以提到背包等是无关紧要的。

与3-SUM问题一样,我认为r-sum问题的算法是o(n ^ [r / 2]),(注意:smallOH和[x] =最大整数> = x,例如[5/2] = 3)仍然开放。

在3-SUM页面here中有一个简短的提及,其中有一个声称已经在限制的计算模型中证明了上述界限。

因此,优于O(n ^ 3)(即o(n ^ 3))可能是一个悬而未决的问题。