價值密度優先貪心策略對分數揹包問題的正確性證明

ZCF_093發表於2018-04-26

      分數揹包問題是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<=k<j,Wk=Wrk; 對於j<k<=n, Wk =0;對於j, 有0<=Wk<Wrk. 設m是使得Wik != Wk的最小下標,由上面的假設,可以推得Wim <Wm ,這可從三種可能發生的情況,即m<j,m=j或m>j分別得到證明:

       若m<j,則Wm=Wrm,因Wim != Wm,且0<=Wik<=Wrk,從而Wim<Wm  。

       若m=j,(1)先證在這種情況下Wm!=0. 假設Wm=0,此時有Wk=Wrk=Wik(1<=k<m), 否則,與m是使得Wik != Wk的最小下標矛盾;這樣就有Wim>Wm=0, 然而,此時∑Wik>∑Wk=c, 與S(i)是可行解矛盾. 故當Wm>0;(2)對於1<=k<m,有Wk= Wik = Wrk ,若Wim >Wm ,則∑Wik>∑Wk=c ,與S(i)是可行解矛盾. 若Wim=Wm ,與Wim != Wm矛盾,故Wim<Wm .

       若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<k<=n) = 0.

       Z總價值量=∑zkvk(1<=k<=n) = ∑Wikvk(1<=k<=n) + 價值改變數

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

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

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

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

        從而得出了∑zkvk(1<=k<=n)>∑Wikvk(1<=k<=n), 這與S(i)是一個全域性最優解相矛盾.

        綜上所述,黑體字假設不成立,從而得出了價值密度優先貪心策略用於分數揹包問題獲得的解是最優解的結論.


相關文章