(转自)http://hi.baidu.com/35661327/blog/item/d5463e17f1e8d011972b439c.html

动态规划和贪心算法的区别
2009-07-27 13:18
动态规划和贪心算法的区别
动态规划和贪心算法都是一种递推算法 
均有局部最优解来推导全局最优解

不同点: 
贪心算法: 
1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。 
2.由(1)中的介绍,可以知道贪心法正确的条件是:每一步的最优解一定包含上一步的最优解。

动态规划算法: 
1.全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解 
2.动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解 
3.边界条件:即最简单的,可以直接得出的局部最优解
==============================================================================
贪心算法与动态规划 
贪心法的基本思路:   
    
从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。   
该算法存在问题:   
1.   不能保证求得的最后解是最佳的;   
2.   不能用来求最大或最小解问题;   
3.   只能求满足某些约束条件的可行解的范围。实现该算法的过程:   
从问题的某一初始解出发;
   
while   能朝给定总目标前进一步   do   
求出可行解的一个解元素;   
由所有解元素组合成问题的一个可行解

贪心算法最经典的例子,给钱问题。   
比如中国的货币,只看元,有1元2元5元10元20、50、100   
    
如果我要16元,可以拿16个1元,8个2元,但是怎么最少呢?   
如果用贪心算,就是我每一次拿那张可能拿的最大的。   
比如16,我第一次拿20拿不起,拿10元,OK,剩下6元,再拿个5元,剩下1元   
也就是3张   10、5、1。   
    
每次拿能拿的最大的,就是贪心。   
    
但是一定注意,贪心得到的并不是最优解,也就是说用贪心不一定是拿的最少的张数   
贪心只能得到一个比较好的解,而且贪心算法很好想得到。   
再注意,为什么我们的钱可以用贪心呢?因为我们国家的钱的大小设计,正好可以使得贪心算法算出来的是最优解(一般是个国家的钱币都应该这么设计)。如果设计成别的样子情况就不同了   
比如某国的钱币分为   1元3元4元   
如果要拿6元钱   怎么拿?贪心的话   先拿4   再拿两个1     一共3张钱   
实际最优呢?   两张3元就够了

求最优解的问题,从根本上说是一种对解空间的遍历。最直接的暴力分析容易得到,最优解的解空间通常都是以指数阶增长,因此暴力穷举都是不可行的。
最优解问题大部分都可以拆分成一个个的子问题,把解空间的遍历视作对子问题树的遍历,则以某种形式对树整个的遍历一遍就可以求出最优解,如上面的分析,这是不可行的。
贪心和动态规划本质上是对子问题树的一种修剪。两种算法要求问题都具有的一个性质就是“子问题最优性”。即,组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的。如果以自顶向下的方向看问题树(原问题作根),则,我们每次只需要向下遍历代表最优解的子树就可以保证会得到整体的最优解。形象一点说,可以简单的用一个值(最优值)代表整个子树,而不用去求出这个子树所可能代表的所有值。
动态规划方法代表了这一类问题的一般解法。我们自底向上(从叶子向根)构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,并且以其中的最优值作为自身的值,其它的值舍弃。动态规划的代价就取决于可选择的数目(树的叉数)和子问题的的数目(树的节点数,或者是树的高度?)。
贪心算法是动态规划方法的一个特例。贪心特在,可以证明,每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。通常这个值都是对于当前的问题情况下,显而易见的“最优”情况。因此用“贪心”来描述这个算法的本质。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。这样,与动态规划相比,它的代价只取决于子问题的数目,而选择数目总为1。

转载于:https://www.cnblogs.com/JarvisChu/archive/2010/12/05/2752517.html

(转)动态规划和贪心算法的区别相关推荐

  1. 从 活动选择问题 看动态规划和贪心算法的区别与联系

    这篇文章主要用来记录我对<算法导论> 贪心算法一章中的"活动选择问题"的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题 ...

  2. 动态规划和贪心算法的区别

    要想清楚两者的区别,首先就要了解两者的基本概念与性质. 1. 贪心算法 基本思想:贪心算法并不从整体最优上加以考虑,它所做的选择只是在某种意义上的局部最优解. 基本要素:最优子结构性质和贪心选择性质. ...

  3. 活动安排问题的 动态规划和贪心算法

    这篇文章主要用来记录我对<算法导论> 贪心算法一章中的"活动选择问题"的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题 ...

  4. 浅谈动态规划和分治、贪心算法的区别

    一个问题必须拥有重叠子问题和最优子结构,才能使用动态规划去解决. 一.动态规划与分治算法 分治和动态规划都是将问题分解为子问题,然后合并子问题的解得到原问题的解. 但是不用的是,分治法分解出的子问题是 ...

  5. 分治法、动态规划、贪心算法区别

    联系 分治.动态规划.贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的. 区别 分治: 子问题不重复时候更适合,重复也能用,效率低,最好动态规划. 动态规划: 重复的公共子问 ...

  6. 分治算法,动态规划算法和贪心算法的区别和联系

    分治算法,动态规划算法和贪心算法的区别和联系 (一)分治算法 分治算法为什么叫分治算法? 分治这个名字可以分成两部: 第一部分是分,表示把一个原问题分解成很多个小问题,逐个解决; 第二部分是治, 表示 ...

  7. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  8. 53. 最大子序和 golang (动态规划与贪心算法)

    题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续 ...

  9. 动态规划法和贪心算法

    动态规划法和贪心算法 csdn第一篇blog. 先说说写文章的好处: 第一,写文章是个学习的过程.写的过程中随着自己的思路的进行,会出现理解不清楚的地方,自然就会翻书或者google的搞明白. 第二, ...

最新文章

  1. Python高级特性——切片(Slice)
  2. caffe problem
  3. 解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案
  4. ionic android 版本号,ionic android 版本release 和 签名(示例代码)
  5. AngularJs自学心得
  6. 面试题系列(9):对前端界面工程师这个职位是怎么样理解的?
  7. html5泵站,基于 HTML5 WebGL 的污水处理厂泵站自控系统
  8. git上传项目全部流程
  9. Spring系统学习:180615--通过外部属性文件导入对数据库的连接
  10. Hadoop学习总结之Map-Reduce的过程解析
  11. 测试驱动开发(TDD)开发思路
  12. MacOS为什么无法删除ABC或日语输入法
  13. grep -A -B -C -a -c -n -v -i等
  14. 永洪科技贺新颖:业务中台+数据中台,赋能企业核心业务
  15. 深度解密阿里达摩院:如何让科技与商业共舞
  16. YouVideo在线视频平台
  17. 查看连接到手机热点的树莓派IP地址
  18. DCDC电源测试以及纹波测试方法
  19. 从Excel中复制数据
  20. 物业系统管理源码 物业系统源码

热门文章

  1. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习
  2. spark sql 性能优化
  3. (55)FPGA基本约束-UCF与XDC(第11天)
  4. (12)System Verilog随机变量
  5. (92)Verilog HDL系统函数和任务:$fclose
  6. (04)Verilog HDL模块仿真激励
  7. (36)FPGA面试题D触发器实现4进制计数器
  8. java 数据库备份 linux,java邮件打包在linux备份数据库练习
  9. ieee期刊的科技写作思路曹文平_科技论文写作与发表教程(第六版)
  10. 给窗口添加背景图的案例