动态规划
特点
- 本质是缩小最优解空间寻找最优解,所有的决策类求最优解的问题都是在状态空间内找一个可以到达的最佳状态。搜索的方式是去遍历每一个点,而动态规划则是把状态空间变形,由此变成从初始到目标状态的最短路问题。
- 无后效性:当前问题的最优解的获得方式与之后的最优解求解无关,即目前的求解算法与之后的求解算法不形成闭环后耦合关系。
- 具有最优子结构:在整体问题的最优解可以由子问题的最优解求出。
关键:找准状态和状态转移方程
所以一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!
- 每个阶段只有一个状态->递推;
- 每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心;
- 每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;
- 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划。
例子
- 最长上升(递增)子序列(LIS) :给定一个数列,长度为N,设
为:以数列中第k项结尾的最长递增子序列的长度.
求中的最大值.
- 最长公共子序列(LCS) 与最长公共子串,最长回文子串