动态规划算法(英语:Dynamic programming,简称 DP),与分治法类似,其基本思想是将待求解的问题分解成若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,适合动态规划的问题分解得到的子问题往往不独立,如果使用分治法可能需要对一些问题进行多次重复计算,耗费的时间可能达到指数级。动态规划算法通过保存子问题的解,当再次需要时查表得到答案,以避免大量重复计算。
动态规划算法的基本要素:
- 最优子结构性质;
- 重叠子问题性质;
动态规划算法的基本步骤:
- 找出最优解的性质,并刻画其结构特征
- 递归地定义最优值
- 以自底向上的方式计算最优值
- 根据计算最优值时得到的信息构造最优解