在数组中找到总和等于给定数字的元素的总和
在简单的情况下,我们有一个数组:
{6,1,3,11,2,5,12}
并且我们想知道所有组合,该数组中包含的元素的总和为 。
在这种情况下,我们将获得 组合:
- 12
- 1 + 11
- 6 + 5 + 1
- 1 + 3 + 2 + 6
那么,如何在BASIC或PHP中做到这一点?也许首先是伪代码;-)。
我一直在寻找,但只是有了预定数量元素的组合。
回答:
问题是NP-Hard。甚至确定问题的任何子集是否合计为所需数都是NP-Hard(称为子集和问题),并且没有已知的多项式解。
因此,您应该寻找一种指数解决方案,例如回溯解决方案-生成所有可能的组合,并检查它们是否有效。
您可以使用修整来加快搜索速度(例如,如果生成总和13的一部分子集,则无需检查作为该子集超集的其他子集,因为它们绝对不会导致解决方案。
伪代码:
findValidSubsets(sum,arr,idx,currSolution): if (sum == 0):
print currSolution
if (sum < 0): //trim the search, it won't be succesful
return
//one possibility: don't take the current candidate
findPermutations(sum,arr,idx+1,currSolution)
//second poassibility: take the current candidate
currSolution.add(arr[idx])
findPermutations(sum-arr[idx],arr,idx+1,currSolution)
//clean up before returning:
currSolution.removeLast()
复杂性是O(2^n)
-需要在最坏的情况下生成所有2 ^ n个可能的子集用
调用findValidSubsets(desiredSum,myArray,0,[])
,其中[]
空的初始列表
以上是 在数组中找到总和等于给定数字的元素的总和 的全部内容, 来源链接: utcz.com/qa/418185.html