我在this课程中遇到了以下问题:
考虑背包问题的一种变化,我们有两个问题 背包,容量为1和2。像往常一样,我们得到 具有正值和正整数权重的项目。我们想 选择具有最大总值的子集1,2,以使总权重1和1分别最大为1和2。假设每个项目都适合放在背包中。考虑以下两种算法方法。
(1)使用讲座中的算法为第一个背包选择一个最大可行解1,然后在其余项目上再次运行它以为第二个背包选择一个最大可行解2。>
(2)使用讲座中的算法为容量为1 + 2的背包选择一个最大可行解,然后将所选项目分解为 两组1 + 2的大小分别为1和2。
以下哪项是正确的?
保证
算法(1)可以为原始问题提供最佳的可行解,前提是1 = 2。
算法(1)被保证 为原始问题提供最佳可行解决方案,但 算法(2)不是。
算法(2)保证产生一个 原始问题的最佳可行解,但是算法(1)是 不。
两种算法都不能保证产生最佳可行 解决原始问题的方法。
“来自演讲的算法”在YouTube上。 https://www.youtube.com/watch?v=KX_6OF8X6HQ,这是一个袋子的0-1背包问题。
该问题的正确答案是选项4。This,this和this发布该问题的当前解决方案。但是,我很难找到表明选项1到3不正确的反例。你能引用吗?
编辑: 可接受的答案未提供选项1的反例;参见2 knapsacks with same capacity - Why can't we just find the max-value twice。
答案 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)更好