算法设计与分析-动态规划-数字三角形(2)

有了数字三角形(1)的基础,下面,我们进一步改进向着动态规划进发。

进一步的改进

递归虽然简单方便,效率实在不敢恭维,许多时候我们需要把递归改为递推,改用循环实现
在这里插入图片描述

分析

我们知道底边到底边的最大和就是该位置权重
那么倒数第二行到底边的最大和就是其权重加左右下角中最大的最大和的,求出填入表中。
同理倒数第三行也可以如此

so

我们就不需要递归了,直接两重循环即可求出所有位置的最大和,我们记录最大和也不需要二维数组,可以挤空间,更进一步我们可以存在D数组最后一行,空间更加优化。
在这里插入图片描述
在这里插入图片描述

递归到动态规划的一般转化思路

在这里插入图片描述

1.分解为子问题

在这里插入图片描述

2.确定状态

在这里插入图片描述
计算的时间复杂度由状态数量和计算状态的代价决定。
在这里插入图片描述
在这里插入图片描述

3.找边界值

边界值就是仅一步计算即可得出结果的值,由边界层层递推向上,填充数组。

4.确定状态转移方程(递推公式)

在这里插入图片描述

什么问题可以用动态规划

在这里插入图片描述

1.最优子结构

比如数字三角形,原问题该位置到底边的最大值,它的子问题是左下方的位置到底边的最大值和右下方到底边的最大值,原问题要求子问题必须也是最优的。

2.无后效性

原问题不需要关心子问题的解是如何得出的,它只需要子问题确定值后,用子问题的值计算原问题的值。

3.具有重叠子问题

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值