我想解决的问题有一个项目表:
Item | x | y | z | ... | n
================
A | 2 | 3 | 1
B | 6 | 6 | 8
C | 9 | 2 | 1
D | 1 | 5 | 7
.
.
.
w
{x, y, z, ..., n}
的值可以是任意的,并且可以有任意数量的行和列。
你会有约束,当你将项目组合在一起时,总和是:
1. 7 <= sum(x) <= 10
2. 10 <= sum(y) <= 15
3. 8 <= sum(z) <= 10}
和
4. The number of items is 2 <= numItems <= 10
一种可能的解决方案是:A + B
(x = 8,y = 9,z = 9)
目标是找到满足此要求的所有可能组合。或者,如果这需要太长时间,只需要一个非常小的子集。
我的问题是有没有合适的算法来解决这个问题?这不是一个家庭作业问题或任何事情,它是我个人项目的问题。我一直试图想出一个解决这个问题的好方法,但似乎总是找到效率很低的解决方案。希望我能错过一些东西。
答案 0 :(得分:3)
这个问题是NP完全的。您可以轻松地将Subset-Sum简化为此问题,如下所示。
对于给定输入S,k,子集和问题:
k<=sum(X)<=k
1<=numItems<=|S|