码迷,mamicode.com
首页 > 编程语言 > 详细

贪心算法和动态规划的区别与联系

时间:2018-09-28 00:07:56      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:分解   背包   穷举   贪心算法   情况下   穷举法   贪心   strong   重叠   

联系

1.都是一种推导算法

2.都是分解成子问题来求解,都需要具有最优子结构

区别

1.贪心:每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留;

动态规划:全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解 

2.贪心:如果把所有的子问题看成一棵树的话,贪心从根出发,每次向下遍历最优子树即可(通常这个“最优”都是基于当前情况下显而易见的“最优”);这样的话,就不需要知道一个节点的所有子树情况,于是构不成一棵完整的树;

动态规划:动态规划则自底向上,从叶子向根,构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,最后得到一棵完整的树,并且最终选择其中的最优值作为自身的值,得到答案

3.根据以上两条可以知道,贪心不能保证求得的最后解是最佳的,一般复杂度低;而动态规划本质是穷举法,可以保证结果是最佳的,复杂度高。

4.针对0-1背包问题:这个问题应比较选择该物品和不选择该物品所导致的最终方案,然后再作出最好选择,由此就导出许多互相重叠的子问题,所以用动态规划。

贪心算法和动态规划的区别与联系

标签:分解   背包   穷举   贪心算法   情况下   穷举法   贪心   strong   重叠   

原文地址:https://www.cnblogs.com/Joezzz/p/9716193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!