Dynamic Programming 类问题的空间优化方法 - 滚动数组
Posted lnas01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamic Programming 类问题的空间优化方法 - 滚动数组相关的知识,希望对你有一定的参考价值。
以斐波那契数列为例 来看一下 滚动数组 是如何节约空间的
传统方式:如果想求解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 类问题的空间优化方法 - 滚动数组的主要内容,如果未能解决你的问题,请参考以下文章