首页 > 编程语言 > 详细

Dynamic Programming 类问题的空间优化方法 - 滚动数组

时间:2020-03-12 11:21:25      阅读:50      评论:0      收藏:0      [点我收藏+]

以斐波那契数列为例 来看一下 滚动数组 是如何节约空间的

传统方式:如果想求解fib(7) 需要8个数组空间

0 1 1 2 3 5 8

通过观察 我们可以发现 求解fib(n) 我们只关心fib(n-1)和fib(n-2) 对再之前的数据并不关心 也就是可以认为是无效数据 这种特征特别适用于动态规划类题目

而利用滚动数组 我们只需要3个数组空间

0 1 1 

 1 1 2 

       1 2 3 

          2 3 5 

             3 5 8

 传统方式:

    Fib[0] = 0;
    Fib[1] = 1;
    Fib[2] = 1;
    for(int i = 3; i <= n; ++i)
        Fib[i] = Fib[i - 1] + Fib[i - 2];
    return Fib[n];

 

 滚动数组:

    Fib[1] = 0; 
    Fib[2] = 1;
    for(int i = 2; i <= n; ++i)
    {
        Fib[0] = Fib[1]; 
        Fib[1] = Fib[2];
        Fib[2] = Fib[0] + Fib[1];
    }
    return Fib[2];

 

Dynamic Programming 类问题的空间优化方法 - 滚动数组

原文:https://www.cnblogs.com/lnas01/p/12467090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!