非积分界的动态规划

时间:2011-11-23 13:52:00

标签: algorithm dynamic-programming

您作为输入n项,其中项目i具有正实数权重wi和a 正积分值vi。您还获得了正实值容量W.请注意权重 不必是不可分割的。给出一个动态编程算法,返回子集的值 具有最大总值的项目,该子集的总权重最多为W.(您 不必构造项目的实际子集。)算法的运行时间应为最大项目值vmax = max vi中的多项式和项目数n。

3 个答案:

答案 0 :(得分:4)

我认为这样做是不可能的。如果将所有权重乘以小于1的某个值,则希望算法比以前运行得更快。但那是不可能的,因为问题实际上没有改变。

答案 1 :(得分:2)

0-1背包问题的算法在O(nW)时间内运行,其中n是对象数,W是最大权重。这不是输入大小的多项式解。这里的问题是n和v_max中的线性算法,输入大小也不是多项式。如果我们考虑所有权重的固定点表示,问题基本上是积分权重的0-1背包问题,因为乘以常数因子使所有权重成为整数。

答案 2 :(得分:0)

另一种方法是计算T的连续整数值至少达到总值T所需的最小总重量,直到很明显未来最小权重都将大于W.然后回顾一下找到与权重< = W相关联的最高值。我相信T的每个连续整数值所需的最小权重可以通过动态编程来构造,使用已经为较小的T值做的工作。