理解動態規划、分治法和貪心法


動態規划、分治法和貪心法都是利用求解子問題,而后利用子問題求解更上層問題,最終獲得全局解決方案的方法。

但是三者的應用場景和性質卻存在着極大的不同:

1.分治法

很容易與動態規划問題混淆,但兩者卻有着本質上的差異。

分治法采用的是遞歸的思想來求解問題,兩個分解的子問題獨立求解,其之間無任何的重疊。而上一層問題只需要對兩個子問題進行一定的merge即可得到答案。即s(t)= s(sub1)+s(sub2),但是s(sub1)和s(sub2)之間(看子問題)無任何重疊。

典型應用:

a. 並規排序。

b. 芯片診斷。(前提是對的芯片>錯誤的芯片)

2. 貪心法

可以定義為 s(t)= s(t-1) + selection acoording to certain criteria。 

同樣其使用了類似迭代子問題的求解方式,逐步求得全局的最優答案。而其只有一個s(t-1),故不存在重疊求解子問題的情況。

3. 動態規划方法

該種方法較為復雜,但十分有用和高效,其核心性質是當前當前問題的答案s(t),並不能單獨由s(t-1)求得。還有可能需要使用到s(1)...s(t-1)。具體需要使用到那些,是由問題本身的性質所決定的(常常是一個約束,或變相的約束)。

典型的轉移方程:

file:///Users/yangjingwei/Desktop/Screen%20Shot%202014-11-01%20at%2010.46.08%20AM.png

 


免責聲明!

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



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