动态规划、迭代与递归

递归:好像相对高明,但其实效率而言递归并不是最佳方案。。

迭代:貌似复杂,其实性能更高效。

 

分而治之

DSA动态规划

所谓动态规划:就是通过递归,找出问题本质,并且给出一个初步的解之后,再将其等效的转换为迭代的形式。

  • make it work
  • make it right
  • make it fast

两个栗子:

1. 斐波那契数列(青蛙跳台阶):

  • 解决方法A:(记忆:memoization)  将已计算过实例的结果制表备查。
  • 解决方法B:(动态规划)  颠倒计算方向:由自顶而下递归,为自地而上迭代。

 

2. 最长公共子序列:

 对序列a[0,n]  b[0,m]  lcs(a,b)  无非三种情况:

  1. n=-1 or m=-1  , 则为空序列(“”)
  2. a[n] != b[m]   则  lcs(a[0,n], b[0,m))  与  lcs(a[0,n), b[0,m])中取长者(末字符不同,扣掉)
  3. a[n] = b[m] = 'x'   则 lcs(a[0,n), b[0,m))  + 'x'    #  末字符相同,都去掉,递归求解

 

总结:

递归:设计出可行且正确的解。

动态规划:消除重复计算,提高效率。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值