1. 定義
動態規劃(英語:Dynamic programming,簡稱DP)是一種在數學、管理科學、計算機科學、經濟學和生物信息學中使用的,通過把原問題分解爲相對簡單的子問題的方式求解複雜問題的方法。
動態規劃常常適用於有重疊子問題[1]和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。
2. 適用情況
-
最優子結構
大問題的最優解可以由小問題的最優解推出,這個性質叫做“最優子結構性質”。
-
重疊子問題
A recursive solution contains a “small” number of distinct subproblems repeated many times.
-
無後效性
即某階段狀態一旦確定,就不受這個狀態以後決策的影響。也就是說,某狀態以後的過程不會影響以前的狀態,只與當前狀態有關。
3. 動態規劃與分治的關係
動態規劃其實和分治策略是類似的,也是將一個原問題分解爲若干個規模較小的子問題,遞歸的求解這些子問題,然後合併子問題的解得到原問題的解。區別在於這些子問題會有重疊,一個子問題在求解後,可能會再次求解,於是我們想到將這些子問題的解存儲起來,當下次再次求解這個子問題時,直接拿過來就是。
其實就是說,動態規劃所解決的問題是分治策略所解決問題的一個子集,只是這個子集更適合用動態規劃來解決從而得到更小的運行時間。即用動態規劃能解決的問題分治策略肯定能解決,只是運行時間長了。綜上所述,結論爲:
- 分治策略:一般用來解決子問題相互對立的問題,稱爲標準分治。
- 動態規劃:用來解決子問題重疊的問題。