价值密度优先贪心策略对分数背包问题的正确性证明(整理)

价值密度优先贪心策略对分数背包问题的正确性证明(整理)_第1张图片

      分数背包问题是0/1背包问题的变形,其中物品可以被分解成小块,这就导致可以使用贪心算法来解决此问题。 那么如何证明对于价值密度优先贪心策略用于分数背包问题(the greedy strategy of proft density frst for fractional knapsack problem)可以获得一个最优解呢?

      思路就是将贪心法的解与任意一个最优解进行比较来证明——运用反证法,如果这两个解不同,就找出不相等的解,然后从中推出与假设矛盾的结论,从而证得原命题成立.


      证明:用《算法导论》的话来说,分数背包问题中商品就好比“金砂”. 设预处理:对于这些不同品质金砂,若有某些不同金砂的价值密度相同(vm = vl, m != l),不妨将这几种金砂看作是同种金砂(或者说混合在一起成为一种商品),这就大大简化了证明.

      (一)设背包容量为c,价值密度优先贪心策略算法为pdf, 经预处理后商品总共有n类,每样商品的全部重量为Wrk(1<=k<=n),S(i)={Wi1,…,Win}(0<=Wik<=Wrk)是一个全局最优解;∑Wik=c.

       设S={W1,W2,...,Wn}是pdf所获得的解,且不是最优解,其中v1>v2>...>vn(*),∑Wk=c. 根据预处理可知,(*)式不会取到等号如果所有商品全部装入背包,显然这个解就是最优解;如果不是所有商品装入背包,则设j是使Wk!=1的最小下标,由算法可知,对于1<=kj分别得到证明:

       若m

       若m=j,(1)先证在这种情况下Wm!=0. 假设Wm=0,此时有Wk=Wrk=Wik(1<=kWm=0, 然而,此时∑Wik>∑Wk=c, 与S(i)是可行解矛盾. 故当Wm>0;(2)对于1<=kWm ,则∑Wik>∑Wk=c ,与S(i)是可行解矛盾. 若Wim=Wm ,与Wim != Wm矛盾,故Wim

       若m>j,则Wim>Wm=0, 所以∑Wik>∑Wk=c,与S(i)是可行解矛盾.综上,Wim < Wm.

       (二)现在,假定把Wim增加到Wm,那么必须从{Wim+1,…Win}中减去同样多的量,使得所用的总容量仍是c,这将导致一个新的解Z={z1,…,zn},其中zk=Wk (1<=k<=m). 

        根据假设,重量改变量 = zm - Wim - ∑(Wik-zk)(m

       Z总价值量=∑zkvk(1<=k<=n) = ∑Wikvk(1<=k<=n) + 价值改变量

                                                    = ∑Wikvk(1<=k<=n) + (zm - Wim)vm - ∑(Wik-zk)vk(m

                                            > ∑Wikvk(1<=k<=n) + (zm - Wim)vm - vm∑(Wik-zk)(m

                                                    = ∑Wikvk(1<=k<=n) + vm(zm - Wim - ∑(Wik-zk)(m

                                                    = ∑Wikvk(1<=k<=n)

        从而得出了∑zkvk(1<=k<=n)>∑Wikvk(1<=k<=n), 这与S(i)是一个全局最优解相矛盾.

        综上所述,黑体字假设不成立,从而得出了价值密度优先贪心策略用于分数背包问题获得的解是最优解的结论.

 

你可能感兴趣的:(算法,#,算法导论)