我如何证明Fractional Knapsack展示贪婪策略,
我几乎可以做到,但我无法在理论上找到一种方法来证明它。?
请帮忙 在此先感谢
答案 0 :(得分:1)
(原始)分数背包LP
maximize sum_{i=1}^n v_i x_i
subject to
y: sum_{i=1}^n w_i x_i <= W
z_i: x_i <= 1 (for i=1 to n)
x_i >= 0 (for i=1 to n),
其中v_i
是项i
的值,w_i
是权重。双LP是
minimize W y + sum_{i=1}^n z_i
subject to
x_i: w_i y + z_i >= v_i
y >= 0
z_i >= 0 (for i=1 to n).
通过(弱)LP二元性,如果对原始的贪心解决方案具有与对偶的解决方案相同的目标,那么两者都是最优的。假设所有权重都是正数,它们的总和大于W
,并且该项目的排序是v_1/w_1 >= v_2/w_2 >= ... >= v_n/w_n
。让j
成为枢轴项,以便贪婪的原始解决方案
x_1, x_2, ..., x_{j-1} = 1
x_j = (W - sum_{i=1}^{j-1} w_i) / w_j
x_{j+1}, x_{j+2}, ..., x_n = 0.
通过互补的松弛,我们可以猜测,在双重中,我们应该
z_j, z_{j+1}, ..., z_n = 0.
双重中的x_i
约束相当于
y + z_i/w_i >= v_i/w_i,
所以我们需要设置
y >= v_j/w_j >= v_{j+1}/w_{j+1} >= ... >= v_n/w_n
为了满足我们归零z_i
的约束。在预感中,我们设置了
y = v_j/w_j,
直观地强制分配
z_i = (v_i/w_i - v_j/w_j) w_i (for i=1 to j-1).
现在,这个论点的唯一部分需要严格:验证这是双重的可行解决方案(繁琐且因此留作练习)并且目标与贪婪的原始解决方案相匹配。目标是
W y + sum_{i=1}^{j-1} z_i =
W (v_j/w_j) + sum_{i=1}^{j-1} (v_i/w_i - v_j/w_j) w_i =
sum_{i=1}^{j-1} (v_i/w_i) w_i + (v_j/w_j) (W - sum_{i=1}^{j-1} w_i) =
sum_{i=1}^{j-1} v_i + ((W - sum_{i=1}^{j-1} w_i) / w_j) v_j,
这确实是最初的目标。
答案 1 :(得分:1)
我们需要证明这个问题有贪婪的选择属性。为此,我们需要证明,在使用X
交换某些选项后,任何不包含贪婪选项a
的解决方案a
都没有得到更糟糕的解决方案。
对于分数背包,这很容易展示:我们采用X
的任何元素,比如b
。如果w a &gt; = w' b (其中w a 是a
的权重,w' b 是解b
)中的权重X
,我们可以将b
替换为a
的尽可能大的一部分。因为a
是具有最大值密度的项目(这是我们贪婪的选择),所以这不会使解决方案变得更糟。如果w a &lt; w' b 我们可以取所有a
,并使w' b = w' b - w a 子>。同样,因为a
具有最大的值密度,所以这不会使解决方案变得更糟。
就是这样!我们在技术上也需要显示最佳子结构,但这对于这个问题应该是相当简单的。