DP 动态规划Dynamic programming

DP

 

(DP(动态规划Dynamic programming))

动态规划(dynamic programming)背后的思想非常简单:通常为了解决一个问题,我们需要把它分解成很多类似的但更小的子问题,然后解决这些子问题,最终把这些子问题结果联系起来就解决了原先的那个问题。但是在上面这个过程中,如果使用的是比较“原始”的方法,它会碰到多次产生相同的子问题(比如子问题的子问题重复),多次重复解决这些其实已经被解决过一遍的子问题,从而造成计算机性能和时间上的浪费,动态规划(DP)就是一种保证让每个子问题只被解决一次,而不被重复解决的方法,减少重复计算——它把每次计算子问题的结果都保存起来,下次要计算这个子问题时就先查看这个子问题是否已经被保存(已经被解决过一遍),是则直接返回这个被保存的结果,否则解决这个子问题,然后保存和返回结果。
DP(动态规划)的特点是 重复子问题(子问题会经常出现大量重复)最优解结构(每个子问题的解都保证最优)。由于 “分治”算法 和 快速排序算法 都 没有 重复子问题特点所以不属于动态规划;由于 "贪心"算法无法保证 最优解结构特点,故也不是动态规划。
有2种实现动态规划的方法:
(1) Top-down:在递归中使用一个table记录每个子问题的解决结果,每次开始时先查询table,若已经有这个子问题的记录则直接返回这个结果。
(2) Bottom-up:我们其实可以在方法(1)Top-down的基础上更进一步精炼,不从大问题到小问题递归然后从小问题递归返回大问题,而是直接先解决所有最小的A类问题,利用这些结果解决所有比最小的A类问题大一级的B类问题,利用这些结果解决所有比B类问题大一级的C类问题......依次类推直到解决我们当前碰到的大问题。
第(2)中方法可以使用Bellman equation(在控制理论中经常用到的方程式)来提炼。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值