【发布时间】:2012-08-09 10:11:32
【问题描述】:
我有一个包含自然数的集合 S 和一个数字目标 t。我想知道
我们怎样才能找到这些数字的可能组合的数量,这些数字总和为目标 t。
一个数字可以被取任意次数,并且可以取任意数量的数字来获得 总和等于目标 t。
Example
target 6
Set s {3,8,1,2}
Solution 3+3, 3+2+1, 1+1+1+3, 2+2+2, 2+1+1+2, 2+1+1+1+1, 1+1+1+1+1+1
Total No of solutions possible 7
什么是有效的算法?
【问题讨论】:
-
您已经认为它与subset sum problem 有关。它比归约的子集和问题更难(可归约):如果有 x>0 解决方案,则接受 - 否则,拒绝。所以这个问题也是NP-Hard,在有效(多项式)的标准定义中,没有已知的有效解决方案。对于您的案例,您有其他有效的定义吗?如果是这样 - 请指定它。
-
@amit 为什么动态编程在这里不起作用?
-
@amit 我只想知道有没有多项式时间解。
-
这是一个相同问题的解决方案:algorithmist.com/index.php/Coin_Change
-
@irrelephant: 问题是 NP-Hard,DP 算法很可能会产生 pseudo polynomial 解,它不是多项式,不被认为是高效 在其标准定义中。如果可以找到 NP-Hard 问题的多项式解决方案,它将证明
P=NP(可能并非如此)。
标签: algorithm language-agnostic