《算法导论》16.2 贪心算法原理

一、引入

采取一种更加一般的方法:
在这里插入图片描述

二、贪心选择性质

1、我们可以通过局部最优来构造整体最优解。
2、和动态规划的区别很明显,在动态规划中,每一个步骤都需要进行一次选择,而且选择依赖于子问题的解,因此,我们往往用一种自底向上的方式来解决动态规划问题(或者是带着备忘的自顶向下方法,当然,本质上还是需要先求解子问题再进行选择,还是自底向上);贪心算法中,我们只是选择眼前最好的,然后求解剩下的问题,在进行第一次选择之前是不求解任何子问题的,这个是彻彻底底的自顶向下,不断缩小问题。
3、贪心选择中有众多选择,我们需要改进以使它更加高效。

三、最优子结构

1、这个是能否应用动态规划和贪心算法的关键要素。
2、当应用于贪心算法时,我们通常使用更为直接的最优子结构。我们可以假定,通过对原问题应用贪心选择即可得到子问题。我们真正要做的全部工作就是论证:将子问题的最优解与贪心选择组合在一起就能生成原问题的最优解。这种方法隐含地对子问题使用了数学归纳法,证明了在每个步骤进行贪心选择会生成原问题的最优解。

1、贪心对动态规划

在这里插入图片描述
两个背包问题都具有最优子结构性质。对0-1背包问题,考虑重量不超过W而价值最高的装包方案。如果我们将商品j从此方案中删除,则剩余商品必须是重量不超过W-wj的价值最高的方案(小偷只能从不包括商品j的n-1个商品中选择拿走哪些)。
虽然两个问题相似,但我们用贪心策略可以求解分数背包问题,而不能求解0-1背包问题。
为了求解分数背包问题,我们首先计算每个商品的每磅价值vi/wi,遵循贪心策略,小偷首先尽量多地拿走每磅价值最高的商品。如果该商品已全部拿走而背包尚未满,他继续尽量多地拿走每磅价值第二高的商品,依此类推,直至达到重量上限W。因此,通过将商品按每磅价值排序,贪心算法的运行时间为O(n lgn)。

为什么贪心算法对0-1背包问题无效?
在这里插入图片描述

在0-1背包问题中,当我们考虑是否将一个商品装装入背包时,必须比较包含此商品的子问题的解与不包含它的子问题的解,然后才能做出选择。这会导致大量的重叠子问题——动态规划的标识。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeepCoding♪Toby♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值