如何更好的掌握動態規劃的思想?

時間 2021-06-04 13:16:56

1樓:

《演算法競賽入門經典 (豆瓣)》中LRJ是按「窮舉-分治-dp」來安排書本章節的,這並非偶然,要深入理解並靈活運用dp必須要先對窮舉和分治有很好的基礎。否則就會陷入LRJ指出的一種現象:

「每次碰到新題自己都想不出來,但一看題解就懂」的尷尬情況。

答主剛剛結束這個寒假的演算法集訓,正好寫了一篇關於尋找dp思路的文章,就是針對dp和窮舉分治之間的關係來進行說明的,不妨來看看。

對動態規劃(Dynamic Programming)的理解:從窮舉開始 · Jan Fan

2樓:高洪濤

最近在看演算法導論:上面講的不錯:當問題具有最優子結構和重疊子問題時,可以考慮用動態規劃演算法。

動態規劃方法安排求解順序,對每個子問題只求解一次,並將結果儲存下來。如果隨後再次需要此子問題的解,只需查詢儲存的結果,而不必重新計算。因此動態規劃演算法是付出額外的記憶體空間來節省計算時間,是典型的時空權衡的例子。

也可以參見我整理的部落格:動態規劃 - 華科小濤!

3樓:鄧毅

動態規劃最重要的就是理解最優原理:如果乙個決策的前面若干步驟已經確定從而進入某種狀態之後,後面的步驟從按照當前狀態開始的最優解必然是整體(包括該狀態的情況下)的最優解,則該問題滿足最優原理。換句話說,在求解(整體問題)的最優解的時候,後面的步驟選擇只與當前狀態有關,而與如何到達這個狀態的步驟無關。

問題滿足最優原理之後,我們可以把某個狀態到目標的最優解記錄下來,這樣當通過不同的步驟走到相同的狀態的時候,就不需要重複搜尋了,有一些問題還可以推出遞推公式進行求解。

設計動態規劃演算法的時候,最核心的就是如何設計狀態,使得狀態的可能性盡量少,卻又同時滿足最優原理。例如,如果狀態被設定為所有到達該狀態步驟組成,顯然符合最優原理,但這就和原來的問題一樣了,並沒有讓問題更簡單。

最後,動態規劃演算法和廣度優先搜尋解決的是同樣的問題,解決問題的方法的描述方式不同而已。

動態規劃和遞迴之間的關係是什麼?

鄧哥不是燉鍋 個人理解 遞迴 當前時刻的 的解一定來自於上一時刻 DP 當前時刻的 的解可能來自於前面任意時刻大部分時候,DP和帶記憶的遞迴效果相同。當DP每個時刻都只依賴於前一時刻的最優解時,DP退化為貪心法 多讀書。讀好書。參考 演算法導論 中的動態規劃篇章。不懂就該找書看。演算法是演算法,實現...

有沒有什麼解決動態規劃問題的訣竅?

Whales 定義狀態F x 建議可以嘗試由後往前推 例如爬樓梯每次可爬一步或兩步,爬到第100步有多少種爬法定義F 100 為爬到第100步一共有幾種爬法,以此類推然後往前思考規則,F 100 F 99 F 98 狀態轉移方程也就得到了 剩下就是考慮邊界F 1 F 2 甘文迪許 我感覺列DP方程比...

面對人生挫折,24歲如何更好的規劃人生

王小曼 我的24歲過的真幸福。父母有靠,生活富足,有精分,住高階病房,找工作非常容易。給那工作象養大爺一樣。有女人追求,自己非常高傲。但是每天愁的使很多人都感到奇怪。其實,我心裡真的有那種認為海子和三毛那樣文學巨匠的成功。其實社會也認為他們是成功。我希望浪漫有才華事業成功。我在24歲就是這樣規化我的...