动态规划算法与贪心算法的区别是:贪心:每一步的优异解一定包含上一步的优异解,上一步之前的优异解则不作保留;动态规划:全局优异解中一定包含某个局部优异解,但不一定包含前一个局部优异解。
一、动态规划算法与贪心算法的区别
1.贪心:每一步的优异解一定包含上一步的优异解,上一步之前的优异解则不作保留;
动态规划:全局优异解中一定包含某个局部优异解,但不一定包含前一个局部优异解,因此需要记录之前的所有的局部优异解
2.贪心:如果把所有的子问题看成一棵树的话,贪心从根出发,每次向下遍历优异子树即可(通常这个“优异”都是基于当前情况下显而易见的“优异”);这样的话,就不需要知道一个节点的所有子树情况,于是构不成一棵完整的树;
动态规划:动态规划则自底向上,从叶子向根,构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,最后得到一棵完整的树,并且最终选择其中的优异值作为自身的值,得到答案
3.根据以上两条可以知道,贪心不能保证求得的最后解是优异的,一般复杂度低;而动态规划本质是穷举法,可以保证结果是优异的,复杂度高。
4.针对0-1背包问题:这个问题应比较选择该物品和不选择该物品所导致的最终方案,然后再作出较好选择,由此就导出许多互相重叠的子问题,所以用动态规划。
延伸阅读:
二、DFS简介
深度优先搜索,一般会设置一个数组visited记录每个顶点的访问状态,初始状态图中所有顶点均未被访问,从某个未被访问过的顶点开始按照某个原则一直往深处访问,访问的过程中随时更新数组visited,碰到已访问的顶点则回溯到前一顶点按原则选择另一条路径走,如果无路可走时则再次回溯,坚持此原则(总之就是有路走就走,无路走就回溯),最后会回溯到初始顶点。然后从下一个未被访问过的顶点开始,重复上述过程,直到所有顶点都被访问完。
以上就是关于动态规划算法与贪心算法的区别是什么的内容希望对大家有帮助。