演算法導論-動態規劃(dynamic programming)

來源:互聯網
上載者:User

動態規劃:通過組合子問題的解來解決整個問題。

動態規劃的四個步驟:
1)描述最優解的結構;
2)遞迴定義最優解的值;
3)按自低向上的方式計算最優解的值(首先找到子問題的最優解,解決子問題,最後找到問題的一個最優解);
4)由計算出的結果構造一個最優解。

動態規劃的兩個要素:
1、最優子結構
如果問題的一個最優解中包含了子問題的最優解,則該問題具有最優子結構,當一個問題具有最優子結構的時候,動態規劃可能適用。

最優子結構在問題域中以兩種方式變化:
1)有多個子問題被使用在原問題的一個最優解中;
2)在決定一個最優解中使用哪些子問題時有多少個選擇。

與貪心演算法的區別:貪心是以自頂向下的方式使用最優子結構,貪心會先做選擇,在當時看起來是最優的選擇,然後再求解一個結果子問題,而不是先尋找子問題的最優解茫然後再做選擇。

2、重疊子問題
當一個遞迴演算法不斷調用同一問題時,則該最優問題包含重疊子問題。
使用分治法解決的問題往往在遞迴的每一步都產生全新的問題。動態規划算法總是共同利用重疊子問題,即通過每個子問題只解一次,把解儲存在一個在需要時就可以查看的表中,每次查表時間為常數。
當某個問題的自然遞迴解的遞迴樹中反覆包含同一個子問題,,而且不同的子問題個數很小,可以考慮能用動態規劃來解決問題。

記憶動態規劃
動態規劃的一種變形,既具有通常動態規劃方法的效率,又採用了一種自頂向下的策略。
如果所有的子問題都至少要被計算一次,則一個自底向上的動態規划算法要比一個自頂向下的記憶動態規划算法好處一個常數因子。但如果子問題空間中的某些子問題根本沒有必要求解,記憶演算法就更加有效。

動態規劃常見問題:裝配線調度,矩陣鏈乘,最長公用子序列,背包問題。

參考:《算髮導論》(第二版) 機械工業出版社

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.