滚动数组算法 --- DP思想(动态规划)

以下是自己对于滚动数组的自己理解,有错误的地方各位可以提出来。

滚动数组是DP中的其中一个简单的算法,更确切的说是一种编程思想。

简单的理解就是让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。

具体可以优化DP或者递推中的空间,在数据量很大的时候起到压缩的作用。


Example:


求斐波拉切数列,先用正常的方法求解。

int d[]=new int[100];

d[0]=1;d[1]=1;

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

System.out.printf("%d",d[99]);

此处可以看到这里,如果求解99位,那么需要使用将近快100个存储单元。


接下来使用滚动数组的思想:

int d[]=new int[3];

d[0]=1;d[1]=1;

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

System.out.printf("%d",d[99%3]);

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

这样在使用的时候就可以降低开销,对于某些固定的问题就可以很容易的解决掉。

在时间上没有什么优化,有些甚至是牺牲时间换空间的道理。所以使用的时候,选择适合的比较重要。

    原文作者:动态规划
    原文地址: https://blog.csdn.net/u012965373/article/details/52180788
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞