斐波那契與滾動陣列!

2021-09-11 03:30:27 字數 830 閱讀 6324

我們先來看個著名數列:

斐波那契數列

已知序列1,1,2,3,5,···求序列第x位為多少;

樸素做法就是:a[x]=a[x-1]+a[x-2];

如果是按上面的做法,空間大小可能會很大了,然而對於第x個數字,我們只需要知道x-1和x-2就可以了於是我們這裡就引入滾動陣列優化。

什麼是滾動陣列?

滾動陣列就是根據陣列的特點(一般是對成品**進行修改)進行空間壓縮,雖然沒有時間上的優化,但在空間上的優化非常的明顯。

對於dp一類的題目,不存在後效性,所以一般前面算好的值就會固定封存,對於當前的狀態只需要前面的幾個值就可以了,而其他的值也就可以捨去。所以用滾動陣列優化很有優勢。對於遞迴一類的題目(例如斐波那契)也是適用的,道理同上。

滾動陣列怎麼用?

舉個栗子:關於斐波那契數列的**滾動優化,我們就可以寫成 a[i%3]=a[(i-1)%3]+a[(i-2)%3];

q1:為什麼要用mod

(待定)

q2:為什麼是mod3

其實這裡有幾個變數就mod幾個就可以了

我們以最長上公升子串行例:

for (int i=1;i<=m;i++)

for (int j=1;j<=n;j++)

if (a[j]==k) f[i][j]=f[i-1][j-1]+1;

else f[i][j]=max(f[i-1][j],f[i][j-1]);

對於f[i][j]可以講f[i]給優化掉,變為f[i%2]以及f[(i-1)%2],然而如果f[i][j]中的後一維被優化掉,則會丟失前面記錄的資訊。所以在滾動陣列裡面,為了保證資訊的完整性,我們只優化一維。

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契堆

以下是實現的程式 肯定可以再優化的。include include include include using namespace std class node delete m child m child null class fibonacciheap node insert int key v...