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都能這么優化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM