动态规划算法总结

来源:互联网 发布:凯尔萨斯 知乎 编辑:程序博客网 时间:2024/06/06 08:58

1、基本概念

动态规划是一种求解多阶段决策(优化)问题的算法设计技术,

其主要思想是:将原问题规约为规模较小、结构相同的子问题建立原问题与子问题优化函数间的依赖关系。

从规模最小的子问题开始,利用上述依赖关系求解规模更大的子问题,直到得到原始问题的解为止。


动态规划算法的适用条件

适用于求解多阶段决策(优化)问题,该问题的解可以表示为一个决策序列,且满足优化原则(或最有子结构性质),即:一个最优序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。


动态规划算法的主要设计步骤

  1. 写出所要求解得组合优化问题的目标函数和约束条件
  2. 确定子问题的结构和边界,将问题求解转变成多步判断的过程;
  3. 定义优化函数,以该函数的极大值或者极小值作为判断的依据,确定是否满足优化原则;
  4. 列出有关优化函数的递推关系和边界条件
  5. 根据问题的解的不同情况,考虑是否需要设立标记函数
  6. 从初值开始自底向上计算每个子问题的优化函数值(有的需要同时计算标记函数),并以备忘录得方式存储所有的中间结果;
  7. 如果有标记函数,则根据标记函数逐步追踪问题的解

2、时间复杂度的分析方法


时间复杂度取决于备忘录(包括优化函数及标记函数)中每个项的计算工作量以及用标记函数追踪解得工作量
大多数情况下,追踪解得工作量不超过优化函数计算的工作量,因此可以根据递推关系确定备忘录中每个项的计算工作量,然后对这些工作量求和。

3、典型的动态规划算法


  • 矩阵链相乘
  • 背包问题
  • 最长公共子序列
  • 图像压缩
  • 最大子段和
  • 最优二分检索树

0 0
原创粉丝点击