多背包問題近似解法及其近似比


多背包問題:給定n個物品,其中物品i的價格是vi,重量是wi,有m個背包,背包j最大能裝物品重量為Bj,求這些背包能夠裝下物品的最高價格,其中每個物品要么完全放入背包要么不放入。

(1),給出一個求解該問題的近似算法。

(2),設所有Bj都相等,分析你給出的算法的近似比。

 這個問題到底有沒有非近似的方法?這個是不是NP問題呢?雖然有些疑惑,但還是找出一個近似算法吧!

(1),這里用貪心算法,依次從剩余的物品中用貪心算法使得第i個背包中的物品價值達到最大,i從1到m。

(2),這里我們可以證明這個近似算法具有常近似比。

      設最優解的總價值為C*,我們要證明C*/C為常數, C為這個近似解的最大價值。

  如果有背包沒有物品的話,C*=C。

  這里我們假設每個背包里都有物品。

    假設物品可以部分放入背包,那么我們可以用一個貪心算法解決上面的優化問題,得到的解的最大價值為C', 每個背包j的容量為Wj'=B,價值為Vj',那么C'>=C*。

  方案(1)中,假設每個背包j的容量為Wj,所含物品價值為Vj,那么Vj/Wj >= Vj'/Wj'。在方案(1)基礎上,我們用單位價值為Vj/Wj的物品把背包j填滿,最后物品的總價值為C'', 每個背包j的所含物品的重量為Wj''=B, Vj'', 那么Vj''/Wj'' = Vj/Wj >= Vj'/Wj', 所以C'' >= C'。又有C'' <= kC, 其中,k = B/min{wi}。

  所以C* <= C' <= C'' <= kC, 

     => C*/C <=k(常數)。

  得證。

 

這里有一個更優的解法,近似比為2.

http://wenku.baidu.com/link?url=9PZvMIQN6c_yjckpmLdA98Sm25kE-f61hKxjFlmOdDleDO6Nz-GNqBWCV2F70lOEeccINnpWbTOAywG_xd3r6phFCwCCYRgnsFuTTC6hXHK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM