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

来源:互联网 发布:mac 人民币符号 编辑:程序博客网 时间:2024/05/16 12:06

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

滚动数组是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]);


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

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

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


0 0