从数字集中获取给定数字的最小上限的逻辑

时间:2011-05-04 15:25:52

标签: algorithm sum minimum knapsack-problem upperbound

我的问题如下 -

我和我有一些数字,如下 -

  2
  2
  2
  2
  3
  3
 17
 17
 17
 17
 17
 17
 17
 17
 17
 34
 34
 34
 34
 34
 68
 68
 68
136

因此,如果我将以下数字作为输入,则输出应如下 -

  

[输出是给定数字的总和,   只是大于输入]

 Input  Output
     3      2,2
     4      2,2
     254    17,34,68,136
     7      2,3,3 [or also with 2,2,2,2 but if return same sum,
                   then number count should min]
     205    2,68,136
     10     2,2,3,3

我不只是想尝试每一个组合(即蛮力)来获得结果。所以只想问一下上述情况是否有可能有效的算法。

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个可能的起点on Wikipedia

  

更一般的问题是要求子集求和到指定值(不一定是0)。它可以通过上述算法的简单修改来解决。对于每个xi是正的并且由相同的常数界定的情况,Pisinger找到了线性时间算法。[3]

您的基本问题看起来像是它的扩展版本。您需要找到汇总到input的集合的子集 - 或者失败,汇总到input+1,或者失败,汇总到input+2等。

因此,只需增加目标总和,重复运行Pisinger的算法,直到得到结果? (我没看过论文,所以我不知道Pisinger算法是否满足选择最小子集的决胜局条件。)