利用动态规划求解最优问题的步骤:
(1)证明该问题具有最优子结构性质;
(2)根据最优子结构性质,写出最优值的递归表达式;
(3)根据递归式,说明该问题具有重叠子结构性质;
(4)采用自底向上的方式计算,写出求解最优值的非递归算法,同时构造最优解的解空间树;
(5)遍历解空间树,求得最优解。
利用贪心算法求解最优问题的步骤:
(1)选定合适的贪心选择的标准;
(2)证明在此标准下该问题具有贪心选择性质;
(3)证明该问题具有最优子结构性质;
(4)根据贪心选择的标准,写出贪心选择的算法,求得最优解。
动态规划算法和贪心算法都属于递推算法,并且这两个算法适用的问题都具有最优子结构,都利用局部最优解来推导全局最优解。
动态规划算法和贪心算法有一个显著区别:
1)在动态规划算法中,以自底向上的方式来利用最优子结构,也就是说,首先找到子问题的最优解,解决子问题,然后找到问题的一个最优解。
2)在贪心算法中,以自顶向下的方式使用最优子结构,也就是说,贪心算法会先做出选择,在当时看起来是最优的选择,然后再求解一个结果子问题,而不是先求解子问题的最优解,然后再做出选择。
两者的不同点:
1 贪心算法作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。
2 动态规划算法的全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有局部最优解;