动态规划入门-----数塔问题(求路径及路径最大值)

(思考)我们知道贪婪算法也是进行多阶段的决策过程,通过一系列的贪婪决策找到最优解.那么动态规划和贪婪算法的区别在哪里?

如果不太清楚,我们从今天这个列子来体会.

数塔问题:

数塔从顶部出发,在每一个节点可以选择向左走或是向右走,一直走到底层,要去找出一条路径,
使路径上的数值和最大.
            9
        12  15
     10   6    8
   2    18    9    5

19    7   10   4   16

算法策略:
这个问题不能用贪婪法来解决,为什么呢?
因为贪婪策略每次无论是向上而下,还是自下而上,每次向下都选择较大的一个数移动.
但是由于我们采用贪婪策略,无法得到数塔的全貌只是在一层做贪婪选择,这样可能会得到不正确的答案,所以不采用.


若采用枚举算法?
在数塔的层数为n时,要枚举的路径为2^n-1,数目非常之大,所以也不采用.


分而治之的算法呢?
这个问题的原始数据是一个三角形的二维图形,而且问题的答案与各层数据间关系复杂,所以不适合采用分治法.

所以采用动态规划.

分析一下动态规划的过程:

1)数据结构采用:
原始数据采用二维数组来模拟数塔.
2)动态规划的过程存储:
如果仅仅是求最优解,那么采用一维数组存储最新的决策过程即可,但是这块要求经过的路径,那么采用另一个二维数组存储最新决策.
3)最优解路径求解及存储
原始数据data:                                最优解求解策略数组d(由底向上)
9                                        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值