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


相同點:

  分治法和動態規划都是通過將問題分解成子問題,通過子問題的求解,實現對整個問題的求解。

區別:

1. 子問題關系:

  分治法中划分出的子問題是完全相互獨立的,子問題求解的之間無相互依賴關系,不相互影響。

  動態規划中划分出的子問題不是相互獨立的,不同子問題通常包含一些公共子問題(公共子問題通常是子問題的組成部分),通過公共子問題的求解實現子問題的求解,子問題再通過對比和選擇,求解出整個問題。

2. 共用程度:

  分治法划分出的子問題通常具有“相似”的結構,因此可以用相同的“算法思想”解決。由於只是思想相同,但結果並不通用,所以用自頂向下的遞歸過程來求解。

  動態規划分出的子問題通常具有“相同”的子問題,因此可以用相同的“中間結果”解決。在動態規划中通常會保留子問題的計算結果,供其他求解過程重用,而且為了提高重用程度,會使用自底向上的求解過程,而不直接使用相對費時的遞歸過程。

3.使用場景(自我總結):

  分治法通常用於針對 不同的輸入條件,按照要求進行加工。

  動態規划通常是針對 固定的輸入條件,通過執行時的動態選擇,求解得到最值。這和動態規划的“最優子結構”和“重疊子問題”特點有一定的關系。

 

貪心算法可以看成是動態規划的一種減少執行過程中選擇分支的近似算法。貪心算法在執行中求解最優時,利用貪心策略進行“直觀或理論支持”的選擇,而不是簡單地max(所有選擇),這可以減少選擇分支的計算和判斷,減小復雜度。代價就是有時候貪心算法得到的不是最優解,而是近似優解。


免責聲明!

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



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