Algorithm 常和组合数
假设您得到了一系列整数,包括L1、L2、…、Ln和一个整数 我正在寻找一种方法来有效地计算索引组合Algorithm 常和组合数,algorithm,combinatorics,Algorithm,Combinatorics,假设您得到了一系列整数,包括L1、L2、…、Ln和一个整数 我正在寻找一种方法来有效地计算索引组合j1,j2,…,jn,以便L1[j1]+L2[j2]+…+Ln[jn]=S 以L1=[0,1,1,2],L2=[0,1],L3=[0,1,2,3]和S=4为例。 那么可能的组合是 0+1+3 0+1+3 1+0+3 1+0+3 1+1+2 1+0+3 1+0+3 1+1+2 2+0+2 2+1+1 i、 e.我要找的答案是10这个问题是NP完全问题。你可以 1) 蛮力 或者,如果你有一些额外的财产
j1,j2,…,jn
,以便L1[j1]+L2[j2]+…+Ln[jn]=S
以L1=[0,1,1,2],L2=[0,1],L3=[0,1,2,3]
和S=4
为例。
那么可能的组合是
0+1+3
0+1+3
1+0+3
1+0+3
1+1+2
1+0+3
1+0+3
1+1+2
2+0+2
2+1+1
i、 e.我要找的答案是
10
这个问题是NP完全问题。你可以
1) 蛮力
或者,如果你有一些额外的财产(例如,涉及的总金额很小),你也可以考虑
2) 使用动态规划来获得伪多项式算法。您可以使用DP来解决它。复杂性:O(nS)
Count(i,s) = \sum_j=0..s Count(i-1,j) * Number of elements in list i with value (s-j)