动态规划算法

动态规划的定义

  • 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程最优化的数学方法。

动态规划问题的特点

  • 求解过程是多阶段决策过程,每步处理一个子问题。
  • 每步求解的问题是后面阶段求解问题的子问题。
  • 每步决策将依赖于以前步骤的决策结果。
  • 问题要满足优化原则或最优子结构性质,即:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。

动态规划问题的解决步骤

  1. 问题建模,确定问题的决策对象。
  2. 列出优化的目标函数,约束条件。
  3. 划分子问题,界定子问题的边界。
  4. 判断是否满足优化原则。
  5. 对各阶段确定状态变量。
  6. 建立各阶段状态变量的转移过程,确定状态转移方程。
  7. 自底向上计算,设计备忘录(表格)。
  8. 用递推方程或备忘录估计时间复杂度

动态规划算法的实现方法

  • 递归实现
    动态规划算法的递归实现效率不高,原因在于同一子问题多次重复出现,每次出现都需要重新计算一遍.。

  • 迭代实现
    迭代实现时每个子问题只计算一次,设计标记函数标记每步的决策,考虑根据标记函数追踪解的算法。迭代过程:从最小的子问题算起,考虑计算顺序,以保证后面用到的值前面已经计算好,用存储结构(备忘录)保存计算结果。

  • 两种实现的比较
    递归实现:时间复杂性高,空间消耗少。
    迭代实现:时间复杂性低,空间消耗多。
    递归实现子问题多次重复计算,子问题计算次数呈指数增长。迭代实现每个子问题只计算一次。

动态规划算法的时间复杂度

  • 时间复杂度 = 备忘录各项计算量之和 + 追踪解工作量
  • 通常追踪工作量不超过计算工作量,是问题规模的多项式函数。

动态规划算法的应用举例

动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。下面举几个常见的例子来说明。

背包问题
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值