具有两个背包的0-1背包问题的对策示例

时间:2018-12-25 06:05:16

标签: algorithm dynamic-programming knapsack-problem

我在this课程中遇到了以下问题:

  

考虑背包问题的一种变化,我们有两个问题   背包,容量为1和2。像往常一样,我们得到    具有正值和正整数权重的项目。我们想   选择具有最大总值的子集1,2,以使总权重1和1分别最大为1和2。假设每个项目都适合放在背包中。考虑以下两种算法方法。

     

(1)使用讲座中的算法为第一个背包选择一个最大可行解1,然后在其余项目上再次运行它以为第二个背包选择一个最大可行解2。      

(2)使用讲座中的算法为容量为1 + 2的背包选择一个最大可行解,然后将所选项目分解为   两组1 + 2的大小分别为1和2。

     

以下哪项是正确的?

     
      保证
  1. 算法(1)可以为原始问题提供最佳的可行解,前提是1 = 2。

  2.   
  3. 算法(1)被保证   为原始问题提供最佳可行解决方案,但   算法(2)不是。

  4.   
  5. 算法(2)保证产生一个   原始问题的最佳可行解,但是算法(1)是   不。

  6.   
  7. 两种算法都不能保证产生最佳可行   解决原始问题的方法。

  8.   

“来自演讲的算法”在YouTube上。 https://www.youtube.com/watch?v=KX_6OF8X6HQ,这是一个袋子的0-1背包问题。

该问题的正确答案是选项4。Thisthisthis发布该问题的当前解决方案。但是,我很难找到表明选项1到3不正确的反例。你能引用吗?

编辑: 可接受的答案未提供选项1的反例;参见2 knapsacks with same capacity - Why can't we just find the max-value twice

1 个答案:

答案 0 :(得分:1)

(Weight; Value): (3;10), (3;10), (4;2) 容量7、3

第一种方法在第一个麻袋中选择3 + 3,其余物品不适合第二个麻袋

(Weight; Value): (4;10), (4;10), (4;10), (2:1) 容量6、6

第二种方法选择(4 + 4 + 4),但此组合不能放入两个麻袋而不会丢失,而(4 + 2)和(4)更好