动态规划原理与算法实践(二)
一 动态规划(Dynamic programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划和分治法一样,也是通过定义子问题,先求解子问题,然后在由子问题的解组合出原问题的解。但是它们之间的不同点是分治法的子问题之间是相互独立的,而动态规划的子问题之间存在堆叠关系(递推关系式确定的递推关系)
动态规划一般适用于:
- 求最大值,最小值
- 判断方案是否可行
- 统计方案个数
二 动态规划与递归区别:
递归:是通过函数调用本身来实现的;递归满足的条件:1 基线条件(base case)就是递归的终止条件,无限递归的函数也没有意义。无限递归不等于无限循环,无限递归是导致栈溢出,而循环不会。2 递归条件(recursive case)就是满足方法调用本身的条件。
动态规划:从底部开始解决问题,将所有小问题解决掉,然后合并成一个整体解决方案,从而解决掉整个大问题;递归:从顶部开始将问题分解,通过解决掉所有分解的小问题来解决整个问题;