是否存在K个整数的组合,以便它们的总和等于给定的数字?

时间:2011-12-17 15:38:57

标签: algorithm hashtable backtracking subset-sum

我一直在为这个问题而烦恼,我被要求回答(这是技术上的功课)。 我考虑过一个哈希表,但我有点坚持我如何使这项工作的具体细节

以下是问题:

  

给定 k 整数组 A 1 A 2 ,.总大小为O的 k n ),你应该确定是否存在    a 1 ε A 1 a 2 ε A 2 ,.., a k ε A < / em> k ,这样 a 1 + a 2 + .. + a k -1 = a k < / EM> 。您的算法应在T k n )中运行   时间,其中T k n )= O( n k / 2 ×log n )对于偶数 k 和O( n k +1)/ 2 )对于 k 的奇数值。

任何人都可以给我一个大方向,以便我能够更接近解决这个问题吗?

1 个答案:

答案 0 :(得分:9)

将k组分为两组。对于偶数k,两个组各有k / 2组。对于奇数k,一组具有(k + 1)/ 2而另一组具有(k-1)/ 2组。计算每组中所有可能的总和(从每组中取一个元素)。对于偶数k,您将得到两个数组,每个数组都有n k / 2 元素。对于奇数k,一个阵列具有n (k + 1)/ 2 ,而另一个阵列具有n (k-1)/ 2 元素。问题被简化为标准的“给定两个数组,检查是否可以通过从每个数组中取一个元素来达到指定的总和”。