DP入门
其实想学DP很久了,今天基本了解了一下DP的一些基础概念和实现方法,自己之前有看过书,掌握情况应该不算太差。
动态规划的基础概念?
1.阶段:对于一个已知的问题,把其根据一个特定的有向过程分成若干有一定顺序而相互联系的子过程,以便于求解。
2.状态:每个阶段中面临的客观条件或自然状况称为状态,是不可控制的因素。
3.状态转移:从一个阶段的一个状态转移到下一个阶段的某个状态的一种选择行为,叫做状态转移。
动态规划的原理?
DP的原理有两个,最优化原理(最优子结构)和无后效性。
首先是最优化原理,简单来说就是对于一个以求出的最优策略,其子策略一定是局部的最优策略。这也就使动态规划的过程成为一种由局部最优推出全局最优的过程。(但与贪心不同)
然后是无后效性,对于当前状态而言,在此后过程的演变中不再受到此前的各种状态以及决策的影响,即“未来与过去无关”。简单说,就是当前状态的最优解只和前一个阶段的某几个状态有关,而与之后阶段无关。
动态规划是什么?我认为可以分为这几块:
1.划分阶段
2.状态转移
3.确定边界
这就是动态规划的一般思路。当然,对于一个已知的问题,首先应该先判断其是否具有最优子结构的性质,也即是否能用动态规划来解决。
动态规划如何实现?
1.记忆化搜索
2.递推
介于记忆化搜索需要用到递归,效率不如递推,且大量的优化技巧都是建立在递推上的(如滚动数组,单调队列,斜率优化等等),所以一般用递推来写动规。