2014-09-10 17 views
3

我已经给出了一个数组。我想查找数组的所有排列,因此它总和为特定的数字。
示例
Array a =[2,3,5 ,1]
目标= 8
解决方案:[2,2,2,2],[5,3],[3,3,2],[5,2,1]以及所有可能的组合
请提供我是一种解决这个问题的方法,我面临的问题是如何处理重复的元素。目标是10^6的大量。 我认为它是一样的This theory排列数组中的数字以总计一个数

+2

这有时被称为硬币改变问题,是一个标准的算法问题。你可能有更多的运气搜索这个词。 – templatetypedef 2014-09-10 19:25:35

+0

谢谢大家,我发现它是一种标准算法,很快就会发布我的解决方案 – 2014-09-10 20:15:23

+0

'[5,1,1,1]','[3,3,1,1]','[3 ,2,1,1,1]'和[1,1,1,1,1,1,1,1]',还有[还有更多]? – 2014-09-10 20:15:40

回答

1

您正面临典型的Subset Problem。无论你如何表达,这个问题的最坏情况下的复杂性都是指数级的。你可能会发现很好的多项式时间近似值,但对于一般情况来说奇迹仍然有效。