学动态规划的感悟

【例】以[1,5,2,3,4]找最长的递增数组长度为例。此处最常见的暴力算法便是直接使用递归,1先去找大于1的,然后找到2再从2开始找大于2的,期间长度每找到就加一次1。
在这里插入图片描述

【例】以上图这样的三角数组为例,用二维数组表示就是
7
38
810
每次仅能向下或向右下走(仅能移动一步),找到其路径最大的和。此处也直接用递归,直接从第一个元素(7)开始,然后3和8相加找到最大的。然后用最大的与8和1或1和0分别相加再找出最大的。这也是用了递归,因为每次与新一层得数相加时,是需要用到上一层相加的数(例如,7和8加起来,就不能在跟第三层的8相加了,只能是加1或加0再让这俩比较)。从大面上看,其实就是暴力搜索,因为递归的每一次都代表着一个二叉树的尝试其实会一直递归到结束,每一次都在比较。
【总结1】上述便为暴力搜索算法的应用
【总结2】而上述的每一次递归其实都会直接涉及重复问题,第一个例子若1,2,3,4有了,就不必再1,4相比了。而第二个例子中,从第三层的1就会发现,其实有两条路是经过1的(7,3,1,4和7,3,1,7)而这代表着两次计算。因此也是重复。而此处的重复便可以通过加入记忆的方式来解决。第一个例子中可以加入哈希表,如果遇到重复的,就不比较了;而第二例子可以加入一个变量来记录值,在二维数组的每一个位置都曾在改变量。每次递归都用这个变量来承接累加值。然后递归的返回值返回该变量。当发现该变量不为初始值时,便直接使用改变量,否则再从头加过来进行计算。上述解决了递归的一个重复的大问题,该步可以叫做记忆搜索算法
【总结3】而从后往前推,将记忆搜索算法中的递归转变为递推,就是动态规划算法即利用for循环,代替递归。该部分不作多解释,等刷算法题时再回来补充。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值