在数组中查找和的算法?

时间:2013-02-17 04:01:27

标签: sum set subset-sum array-algorithms

假设你有一些数组,你知道这些元素都是正数,小于数字N。

有人能给我一个算法的一般性高级描述,以确定数组中是否有一些子集,其中所有元素都与N完全相加?

它不需要特别有效;我正在使用的那套很小。

2 个答案:

答案 0 :(得分:1)

如果效率不重要,那么高级算法就是:

input: array A[1..K] of positive numbers, positive N

    for each subset S of { 1..K }
        sum = 0
        for each i in S
            sum = sum + A[i]
        end
        if (sum equals N) return true
    end
    return false

答案 1 :(得分:1)

伪代码。非常低效。

if empty(numbers) return false
return hasSumSubset(numbers, N)

boolean hasSumSubset(numbers[], N):
   p = pop(numbers)
   if empty(numbers) return N == p
   return hasSumSubset(numbers, N-p) or hasSumSubset(numbers, N)

如果您实际执行此操作,请确保为递归调用复制numbers(不通过ref传递);否则它将无法正常工作。