部分背包问题证明贪心算法正确性

 

部分背包问题

证明贪心算法的结构

第一步:符合贪心选择的特性(Greedy Choice Property)

我们需要证明我们的第一个选择(贪心选择 Greedy Choice,First Choice)包含在某些最优解中

 

第二步:符合归纳法结构(Inductive Structure)

我们需要证明第一个选择(贪心选择)\widehat{c}之后,子问题P'和原问题P还是同一类问题,意味着我们的选择不改变问题的结构,并且子问题P'的解可以和第一个选择(贪心选择)\widehat{c}合并

 

第三步:最优子结构(Optimal Substructure)

如果我们可以最优的解决子问题P',我们可以将子问题P'的解和贪心选择\widehat{c}得到原问题P的解

问题本身

输入:

  • n个物品,每个物品i有自身的重量和价值(w_i, v_i)
  • 1个背包,背包最多可以存放重量为M的物品

前提:每个物品可以只取其中的一部分,比如拿0.5个某物品i

输出:

  • 在每个物品可以只取其中的一部分的前提下,使得背包内物品价值最大

定义我们的算法:

按照每个物品的密度d_i= \frac{v_i}{w_i}给物品进行升序排列,然后从密度最高的物品开始选,如果空间不够存放一整个物品,就能存放多少部分这个物品就存放多少部分(Best fit)

证明符合贪心选择的特性:

Claim:让物品i^*为最高密度的物品,假设这里存在一个最优解用到了w=min(w_i,M)这么多重量的物品i^*

证明:

\pi ^*为最优解,

  • 如果\pi ^*用到了w=min(w_i,M)多的物品i^*,那么已经证明了我们的第一个选择(Greedy Choice,First Choice)包含在某些最优解中。
  • 如果\pi ^*没有用到w=min(w_i,M)多的物品i^*,那么我么可以将背包中任意一部分和物品i^*进行交换,因为我们是按照物品密度排序,而且我们已经定义物品i^*为最高密度的物品,所以与物品i^*交换的物品必然比物品i^*的密度要小,所以等量交换后,我们得到的解\pi '会比\pi ^*更优,这个结论与和\pi ^*为最优解的假设冲突,所以最优解\pi ^*中必然含有w=min(w_i,M)多的物品i^*。因此符合贪心选择的特性(Greedy Choice Property)。

证明符合归纳法结构(Inductive Structure)

Claim:在完成第一个选择(贪心选择)\widehat{c}之后,子问题P'和原问题P还是同一类问题,意味着我们的选择不改变问题的结构,并且子问题P'的解可以和第一个选择(贪心选择)\widehat{c}合并

证明:

  • 子问题P'含有除了物品i^*之外的所有物品,背包容量变成了M'=M-w_{i}^*,因此物品i^*可以和子问题P'的解合并。

证明最优子结构(Optimal Substructure)

Claim:定义P为原问题,P'为在完成第一个选择(贪心选择)\widehat{c}之后的子问题,\pi '为子问题P'的最优解,那么\pi = \pi ' \cup {\widehat{c}}为原问题P的最优解

证明:

  • v^*=w\cdot d_i为贪心选择\widehat{c}ww=min(w_i,M)
  • 那么value(\pi )=value(\pi ^{'})+v^*

假设\pi不是最优解,有一个其他的最优解\pi^*,因为我们已经证明了算法符合贪心选择的特性,所以我们知道最优解\pi^*中一定含有贪心选择\widehat{c}

  • 那么\pi ^*-\widehat{c}就应该是子问题P'的解
  • 所以value(\pi ^*-\widehat{c})=value(\pi ^*)-v^*>value(\pi )-v^*=value(\pi ')
  • 但是这与\pi '为子问题P'的最优解的定义产生冲突,所以\pi = \pi ' \cup {\widehat{c}}不可能不是最优解,因为\pi = \pi ' \cup {\widehat{c}}为原问题P的最优解。QED

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部