分治法、動態規划、貪心算法區別


1.分治法

算法思想:將原問題划分成若干個規模較小而結構與原問題相似的子問題,遞歸的解決這些子問題,然后再合其結果,就得到原問題的解

特征:

  • 該問題的規模縮小到一定的程度就很容易解決
  • 該問題可以分解為若干個規模較小的相同問題,即改問題具有最優子結構性質
  • 利用該問題分解出的子問題的解可以合並為該問題的解;
  • 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題

2.動態規划

算法思想:與分治法相似,也是通過組合子問題的解而解決整個問題。區別是,動態規划適用於分解得到的子問題往往不是相互獨立的。在這種情況下如果采用分治法,有些子問題會被重復計算多次,動態規划通過記錄已解決的子問題,可以避免重復計算。

步驟:

  • 描述最優解的結構
  • 遞歸定義最優解的值
  • 按自底向上的方式計算最優解的值
  • 由計算出的結果構造一個最優解的值

要素:最優子結構、重疊子問題

動態規划通常用於求解最優化問題,在這類問題中可能有多個可行解,最終得到的是其中一個最優解。

3.貪心算法

算法思想:通過做一系列的選擇來給出某一問題的最優解,對算法中的每一個決策點,做一個當時(看起來)是最優的選擇。這種啟發式的策略並不是總能產生出最優解。

步驟:

將優化問題轉化成這樣的一個問題,即先做出選擇,在解決剩下的一個子問題

證明原問題總是有一個最優解是做貪心選擇得到的,從而說明貪心選擇的安全性

說明在作出貪心選擇后,剩余的子問題具有這樣一個性質。即如果將問題的最優解和我們所做的貪心選擇聯合起來,可以得出原問題的一個最優解。

要素:貪心選擇性質、最優子結構性質

貪心選擇性質:一個全局最優解可以通過局部最(貪心)選擇來達到。

在動態規划中,每一步都要做出選擇,但這些選擇依賴於子問題的解。因此,解動態規划問題一般是自底向上,從小到大。在貪心算法中,我們所做的選擇總是當前看似最佳的選擇,然后再解決之后所出現的子問題。貪心算法所做的當前選擇可能依賴於已作出的選擇,但不依賴於做出的選擇或子問題的解。貪心策略是自頂向下的,不斷的將給定的問題規約為更小的問題。


免責聲明!

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



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