動態規划、分治法和貪心法都是利用求解子問題,而后利用子問題求解更上層問題,最終獲得全局解決方案的方法。
但是三者的應用場景和性質卻存在着極大的不同:
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