这几天学习动态规划,我的理解是DP大致可分为2类,一种是自下而上(也叫递推),另一种是自上而下。这两种方法都可以达到目的。
仔细来讲动态规划是解决多阶段决策问题的一种方法。并且每一步得出的结论都讲影响下一阶段的结果将每一阶段都需要取出最佳结果然后一步步下去得出最终答案。并且动态规划要秉承最优性原理。而最优性原理就是不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。最优决策序列的子序列,一定是局部最优决策子序列。包含有非局部最优的决策子序列,一定不是最优决策序列。
所以动态规划的思想就是在做每一步决策时,列出各种可能的局部解。依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。以每一步都是最优的来保证全局是最优的。
动态规划的一般步骤:
1、判断问题是否具有最优子结构性质,若不具备则不能用动态规划。
2、把问题分成若干个子问题(分阶段)。
3、建立状态转移方程(递推公式)。
4、找出边界条件。
5、将已知边界值带入方程。
6、递推求解。
动态规划用另外一种方法描述就是一种排除重复计算的算法更具体的就是用空间换取时间。这种方法之一就是记忆化搜索。
比如你在一个题目当中可以先把每一个步骤放到一个数组中储存起来,而当需要使用时只需要在这其中调用就可以,无需在重新计算这便节约了时间,而它的代价就是多用了一个数组的大小罢了。
动态规划可以更简单的解决那些多步骤的复杂问题,也可以节约大量的时间,不过在运用动态规划算法做题的时候还是不甚熟练,还需要多做练习。