动态规划

通常,我们把动态规划简称为:DP(dynamic programming)

首先,动态规划在本质上是对搜索的一种优化。也就是对重叠子问题的优化。
比如斐波那契数列,如果我们既要计算f(99)、f(100)和f(101),我们就可以保存f(99)和f(100)的值,这样对于f(101)来说时间复杂度为O(1),否则时间复杂度为O(101),也就是时间复杂度优化到了约为原来的1/100。

重叠子问题:
重叠子问题就是前面的解可以用在后面一个解上,如上面说过的斐波那契数列。如果没有重叠子问题,则DP无法优化。因为DP的本质是把已经算出的结果存起来,也就是记忆化。并在下一步计算中直接使用上一步的结果,而不是重新算一遍。如果没有重叠子问题,也就是说没有重复计算的地方,那么我们存储结果也没有意义。因此,我们说:如果某个问题没有重叠子问题,那么使用DP无法有效优化。

记忆化:
记忆化的意思就是存储已经算出的结果。

最优子结构:
子问题的最优解可以用于问题的最优解。

无后效性:
如果我们解决了一次问题B(假设解决B使用了问题A的结论),那么我们就不需要再求问题A的结论,在问题B后面的问题直接使用问题B的结论即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值