3.背包问题

1、0-1背包问题

  • 现在有一个小偷,要从商店偷走一些物品。这些物品只能选择带走,或者不带走(要么0,要么1)。物品一共有n件,第i件商品的重量是Wi,价值是Vi。小偷的背包只能带走Wj斤的物品。求应该带走哪几样物品,使得价值最高。

2、部分背包问题

  • 背景和上述一致,但是这次小偷可以带走物品的一部分,而不是必须带走1个完整的物品。可以理解为:
    • 0-1背包问题中:物品是金锭、银锭、铜锭。
    • 部分背包问题中:物品是金沙、银沙、铜沙。

3、解决方案

  • 贪心算法可以求解【部分背包问题】,但是不能解决【0-1背包问题】。贪心算法核心就在于贪心策略的选择。现在假设有下列贪心策略:
    • 选择单位重量价值最高的。
      • 背包承重50kg,有3个物品:10kg-60块、20kg-100块、30kg-120块。我们选择单位重量价值最高的:那么先拿走10kg-60块,背包还剩下40kg。此时单位重量价值最高的是20kg-100块。装进去以后,背包里有30kg,总价值为160块。此时只剩下20kg的容量,装不下30kg-120块了。很明显,这种选择不如拿走(20kg-100块)和(30kg-120块),可以把背包装满,总价值是220块。
      • 选择价值最高的。
        • 很容易举出反例:10kg-20块,20kg-30块,50kg-35块。
    • 选择重量最高的。
      • 反例:10kg-20块,20kg-30块,50kg-35块。

贪心算法没法从全局去规划,求出全局最优解。它只能求出子问题的最优解,把子问题的最优解合并以后,未必是全局的最优解。

贪心算法在子问题得出最优解以后,哪怕之后还有更优解,但是已经无法剔除之前作出的选择。(导致无法得到全局最优解)

  • 在0-1背包问题上,无法得出最优解的主要原因是:贪心策略的规则下,无法保证背包一定能被装满。部分空闲的背包容量,导致已经装进去的物品的平均价值降低了。(上述例子中,剩余的20kg,无法装下最后的那个30kg的物品)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值