多背包問題:給定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.