假设你有一些数组,你知道这些元素都是正数,小于数字N。
有人能给我一个算法的一般性高级描述,以确定数组中是否有一些子集,其中所有元素都与N完全相加?
它不需要特别有效;我正在使用的那套很小。
答案 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传递);否则它将无法正常工作。