【问题标题】:Logic form getting Minimum UpperBound for a given Number from the set of numbers从一组数字中获取给定数字的最小上限的逻辑
【发布时间】:2011-08-18 15:44:44
【问题描述】:

我的问题如下-

我有一些数字,如下所示-

  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

我不只是想尝试每种组合(即蛮力)来获得结果。所以只想问对于上述情况是否有任何有效的算法。

谢谢。

【问题讨论】:

    标签: algorithm sum minimum knapsack-problem upperbound


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2021-03-14
      • 2011-07-15
      • 2018-09-28
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多