约束和算法

时间:2014-04-01 13:36:18

标签: algorithm math

我想解决的问题有一个项目表:

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)

目标是找到满足此要求的所有可能组合。或者,如果这需要太长时间,只需要一个非常小的子集。

我的问题是有没有合适的算法来解决这个问题?这不是一个家庭作业问题或任何事情,它是我个人项目的问题。我一直试图想出一个解决这个问题的好方法,但似乎总是找到效率很低的解决方案。希望我能错过一些东西。

1 个答案:

答案 0 :(得分:3)

这个问题是NP完全的。您可以轻松地将Subset-Sum简化为此问题,如下所示。

对于给定输入S,k,子集和问题:

  • 定义包含S
  • 中所有值的单个列X.
  • 需要k<=sum(X)<=k
  • 需要1<=numItems<=|S|
相关问题