多背包问题近似解法及其近似比

多背包问题:给定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

posted @ 2013-11-10 16:40  尚知行  阅读(...)  评论(...编辑  收藏