动态规划空间压缩技巧

题目描述

常见的动态规划中,如果有两个或者三个可变参数,最终,会生成一张二维或者三维的动态规划表。动态规划的思想就是用空间换取时间,用空间把递归过程中的中间值记录下来,减少时间复杂度。
但是,如果再进一步优化空间呢?是否可以实现呢?当然可以。

二维动态规划空间优化

对于二维动态规划,有两个可变参数,需要画一张二维表,因此,我们就需要申请一个二维数组来存放。那么,二维动态规划的空间优化就是用一维数组就能实现。
话不多说,直接示例加上图:
比如,在一个二维动态规划题目中,最终求解结果是右下角的值,用五角星表示。
在这里插入图片描述
然后,在此题中,一般位置的依赖,是上边和左边,图中圆圈表示。
在这里插入图片描述
这种动态规划题目的已知条件,必须有左上角的数,如果左上角都不知道,就没法向下递推了。
因此,我们可以申请一个一维数组,只保存第一行。
因为依赖关系是左边和上边,但是第一行就只有左边,因此,就只能依赖左边,因此,我们就可以推出第一行。三角位置是已知的,推出第一行。
在这里插入图片描述
有了第一行,就可以推出第二行了,我们动态更新这个一位数组,替换数组中的数值为第二行的,相当于一维数组的复用。
因为第一行已知,那么第二行的第一列的数,因为在边界,所以只能依赖上面的,左边没东西,所以可以推出第二行第一个数,然后更新一维数组第一个数,然后,后面就可以依赖一般的递推规则,从上面和左边依次更新。

在这里插入图片描述
这样,就能顺利更新第二行,然后依次同理更新第三行、第四行…直到右下角。

相关问题

何时才能优化?
首先,就是临近的依赖才可以优化。如果依赖的是上面两行的话,就可以申请两个一维数组,然后轮流更新,比如说,根据第一行,更新第二行,然后,根据一二两行,更新第三行,然后,此时第三行替换掉了第一行的数据,此时两个数组中保存的是二三行的数据,然后再更新第四行,替换第二行,就这样交替更新。同理,如果依赖前面三行的数据,就需要三个一维数组,因此,如果依赖过远,这种优化就不合适了。
三维数组如何优化?首先,三维数组其实也是只有临近依赖才可以优化,比如,三维数组是平面嘛,如果上一层依赖下一层,那么,其实就可以只申请一个二维数组,然后,根据下一层更新上一层,把这个二维数组复用。
如果依赖左上角,左边以及上面的数据,此时,如果出现一维数组更新的时候,某些数据还要用到,但是更新下一行的时候会覆盖掉,此时就可以申请一个变量来临时保存。
比如上面的例子,依赖左边,上边以及左上角,当需要更新第二行第二个位置时,此时,左边有,上面有,但是,左上角的数已经被左边替换掉了,因此,可以申请一个变量记录下左上角的数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值