ACM 学习总结报告(五)

贪心算法与动态规划

一:
  动态规划和贪心算法都是一种递推算法,均有局部最优解来推导全局最优解
二:
贪心最经典的例子是找钱问题,某国钱币包含1、3、4元,如果要找6元,如何找钱会找的最少?
  贪心的思想是每次都拿最大的,先拿4元,再拿一个1元,再拿一个1元,一共是三张。每次都拿最大的就是贪心,但实际上,只需要两张三元是最优解
  所以说贪心算法不一定能得到最优解,贪心必须在一定条件下得到的才是最优解,比如我国钱币,1、5、10元,大家平时找钱使用贪心法就是最优解。
三:
  贪心的做法是自顶向下的,而动态规划的解法是自底向上的。
  比如还是找钱问题,动态规划的求解就是找一元如何找的最少,找两元如何找的最少,找三元如何找的最少,并且每次算当前找的最少的钱都使用了之前计算的各自的最优解,从之前所有子集的最优解中找到最优解。
  同时由于每次都记录了每个子问题的最优解,不用每次都重新求子问题的最优解,而是直接使用,就会比暴力解法快很多。
四:
(1)、贪心算法是动态规划的一种特例,贪心算法能解决的问题动态规划一定能解决。动态规划能解决的问题,贪心不一定能够解决。
(2)、贪心的复杂度低,动态规划的复杂度高
五:
  求最优解的问题,从根本上说是一种对解空间的遍历。
  贪心和动态规划本质上是对子问题树的一种修剪。两种算法要求问题都具有的一个性质就是“子问题最优性”。即,组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的。如果以自顶向下的方向看问题树(原问题作根),则我们每次只需要向下遍历代表最优解的子树就可以保证会得到整体的最优解。形象一点说,可以简单的用一个值(最优值)代表整个子树,而不用去求出这个子树所可能代表的所有值。
  动态规划方法代表了这一类问题的一般解法。我们自底向上(从叶子向根)构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,并且以其中的最优值作为自身的值,其它的值舍弃。动态规划的代价就取决于可选择的数目(树的叉数)和子问题的的数目(树的节点数,或者是树的高度)。
  贪心算法是动态规划方法的一个特例。贪心特在,可以证明,每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。通常这个值都是对于当前的问题情况下,显而易见的“最优”情况。因此用“贪心”来描述这个算法的本质。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。这样,与动态规划相比,它的代价只取决于子问题的数目,而选择数目总为1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值