定义
Dynamic Programming(DP),
和贪心、分治一样,DP并不是一种特定算法,而是一种算法思想
每次决策依赖于当前状态,又随即引起状态的转移
一个决策序列就是在变化的状态中产生出来的
所以,这种多阶段最优化决策解决问题的过程就称为动态规划
将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解
满足无后效性、最优子结构性质
性质
无后效性
对于「无后效性」,某个状态一旦确定,此后的过程演变不再受此前各状态的影响
“未来与过去无关”,这就是无后效性
如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响
为什么需要无后效性?
随着DP题目训练量增多,你会发现,
DP其实利用的是前面子问题的信息来进行求解,
如果后面的计算影响到了前面的结果,那么DP的正确性就无法保证了
最优子结构
大问题的最优解可以由小问题的最优解推出,这个性质叫做“最优子结构性质”
核心思想
DP为什么会快?
无论是DP还是暴力,我们的算法都是在可能解空间内,寻找最优解
DP是枚举有希望成为答案的解。这个空间比暴力的小得多
也就是说:DP自带剪枝。 D