zoukankan      html  css  js  c++  java
  • c++滚动数组

    说来惭愧,我老早以前就学习了dp,可直到最近才知道滚动数组。

    所以说,滚动数组是什么呢?

    它是一种优化dp空间复杂度的思想。

    在dp转移时,我们往往不需要之前推的所有的,而是只需要前一两个转移的。

    我们以斐波那契数列为例,代码如下:

    for(int i=2;i<100;i++)
    {
        d[i]=d[i-1]+d[i-2]
    }

    printf("%d",d[99]);

    可以发现,如果求解99位,那么需要使用将近快100个存储单元。

    如果求解位数更多,那么空间就爆了。

    那用滚动数组怎么优化呢?

    for(int i=2;i<100;i++)
    {
        d[i%3]=d[(i-1)%3]+d[(i-2)%3];
    }
    printf("%d",d[99%3]);

    这里无论求多少个,只需要留出三个存储单元的位置即可。

    可以发现,空间优化了很多,但时间没有优化,甚至会更差。

    而且,滚动数组还会覆盖之前的解,所以不是所有dp都能这么优化。

  • 相关阅读:
    出差(十四)确定
    出差(十三)协作
    出差(十二)现状
    出差(十一)变化
    手机的惊险一幕
    出差(十)重复
    出差(九)假象
    出差(八)了解
    出差(七)学习
    Servlet程序开发-- servlet跳转
  • 原文地址:https://www.cnblogs.com/mxrmxr/p/9800604.html
Copyright © 2011-2022 走看看