相同:
动态规划和贪心算法都是一种递推算法
均有局部最优解来推导全局最优解
不同点:
贪心算法:
1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。
2.由(1)中的介绍,可以知道贪心法正确的条件是:每一步的最优解一定包含上一步的最优解。
动态规划算法:
1.全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解
2.动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解
3.边界条件:即最简单的,可以直接得出的局部最优解
在动态规划之前要分析能否把大问题分解成小问题,分解后的小问题也存在最优解,如果把小问题的最优解组合起来能够得到整个问题的最优解。
动态规划的四个特点
求一个问题的最优解(通常是最大值或最小值)
该问题能划分为若干个子问题
子问题之间还有重叠的更小的子问题
由于子问题在分解大问题的过程中重复出现,为了避免重复求解子问题,我们可以从下往上的顺序先计算小问题的最优解并存储下来,再以此为基础求取大问题的最优解。从上往下分析问题,从下往上求解问题。
贪心是求局部最优,以得到全局最优(不一定是正确的,需要证明)
某种程度上,动规是贪心的泛化,贪心是动规的特例。