寫dp的時候如何優化遞迴思路的tle問題

時間 2021-06-27 16:08:49

1樓:happyyang

首先dp和遞迴是兩件事,但有聯絡。直觀的講,dp是從底向上填表,遞迴是從頂往下問題分解。

我個人的經驗是這樣的:當你決定寫乙個遞迴的時候,要注意遞迴函式是否會反覆計算同樣的輸入引數。如果是,就需要把中間結果儲存下來,這就更像dp了。

典型的遞迴而非dp是二叉樹的各種搜尋。之所以用遞迴是因為二叉樹裡的任意一點只有一條路能夠從根訪問到,所以在乙個點上不會重複執行。從根遞迴就能不重複的遍歷每個節點。

典型的dp而非遞迴是求斐波那契數,如果寫遞迴,就會反覆計算一項數,這時就要dp。你還是可以寫成遞迴的樣子,但一定要儲存已經算出來的結果,才能保證複雜度不上公升。

2樓:趙馮平

可以用斐波那契數問題作為最簡單的例子說明問題。

斐波那契數的遞迴程式如下:

#include

using

namespace

std;

intcc=0

;intf(

intn

)int

main

()時間複雜度O(f(n)), f(n)是斐波那契數,空間複雜度O(n)。

斐波那契數的遞迴記憶法程式如下:

#include

using

namespace

std;

intcc=0

;intg[

1000

];//用於記憶的陣列

intf

(intn)

}}intmain

()遞迴記憶法的時間複雜度為O(n),空間複雜度O(n)。

執行上面2個程式,可以觀察比較它們的遞迴執行次數。

斐波那契數的遞推實現:

#include

//方法2

using

namespace

std;

intmain

()時間複雜度為O(n),空間複雜度為O(n)。

斐波那契數的遞推(空間壓縮)實現:

#include

//方法2

using

namespace

std;

intmain

()cout

<

2];return0;

}時間複雜度為O(n),空間複雜度為O(1)。

同樣,對於揹包問題,可以用遞迴、遞迴記憶法、遞推、遞推(空間壓縮)。

如何優化雙重for迴圈效能,有什麼好的思路?

kin 第二個for語句執行完後,是回到第乙個for語句執行的,jlt i的話,i的值是隨第乙個for語句改變的,乙個迴圈執行i次,所以輸出第乙個迴圈輸出1 1,第二個迴圈輸出1 2,2 2,第三個迴圈輸出1 3,2 3,3 3,一直到第9個迴圈輸出1 9到9 9,如果是jlt 9,乙個迴圈執行9次...

面試的時候,要求提供創意和寫產品優化方案,大家覺得合理嗎?

社會小學生 表示投了很多大公司並且面試了一部分後發現,很多公司都是這樣吧,他們把公司的一些問題發出來,集思廣益,看看廣大求職者有沒有好的思路,然後有沒有有創意的,他們滿意的,我覺得好像都是這樣。沒有什麼合不合理,想進人家的公司,就要做人家的題目啊,況且這個之所以稱為面試問題,一定有人家的理由啦 咱們...

這種水平寫的網文,還可以怎麼改進,如何優化?

orchimike 1.容貌可以具體點,比如英俊神武是什麼樣子?不如改成 那男子劍眉星目,方臉獅子鼻 2.武打場面可以具體一點。比如飛鳥經過,那防護罩突然泛起雷電,擊下飛鳥。 華夏,帝都。幽靜的房間顯出裂縫,如鏡破碎一樣。裡面走出一位右手持劍,懷裡抱著嬰兒的中年人。從中年人臉色蒼白的模樣,看得出經歷...