算法分析02:動態規劃

1. 定義

動態規劃(英語:Dynamic programming,簡稱DP)是一種在數學、管理科學、計算機科學、經濟學和生物信息學中使用的,通過把原問題分解爲相對簡單的子問題的方式求解複雜問題的方法。

動態規劃常常適用於有重疊子問題[1]和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。

2. 適用情況

  • 最優子結構

    大問題的最優解可以由小問題的最優解推出,這個性質叫做“最優子結構性質”。

  • 重疊子問題

    A recursive solution contains a “small” number of distinct subproblems repeated many times.

  • 無後效性

    Reference 01

    Reference 02

    即某階段狀態一旦確定,就不受這個狀態以後決策的影響。也就是說,某狀態以後的過程不會影響以前的狀態,只與當前狀態有關。

3. 動態規劃與分治的關係

Reference 01

Reference 02

動態規劃其實和分治策略是類似的,也是將一個原問題分解爲若干個規模較小的子問題,遞歸的求解這些子問題,然後合併子問題的解得到原問題的解。區別在於這些子問題會有重疊,一個子問題在求解後,可能會再次求解,於是我們想到將這些子問題的解存儲起來,當下次再次求解這個子問題時,直接拿過來就是。

其實就是說,動態規劃所解決的問題是分治策略所解決問題的一個子集只是這個子集更適合用動態規劃來解決從而得到更小的運行時間。即用動態規劃能解決的問題分治策略肯定能解決,只是運行時間長了。綜上所述,結論爲:

  • 分治策略:一般用來解決子問題相互對立的問題,稱爲標準分治。
  • 動態規劃:用來解決子問題重疊的問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章