自學動態規劃

1.動態規劃的定義
  動態規劃,dynamic Programming,是一種高效解決問題的方法,使用與具有重複子問題和最優子結構的問題。
2.動態規劃的核心簡單解釋
         一句話:Those who cannot remember the past are condemnde to repeat it.
         一段對話:
A * "1+1+1+1+1+1+1+1 =?" *

A : "上面等式的值是多少"
B : *計算* "8!"

A *在上面等式的左邊寫上 "1+" *
A : "此時等式的值爲多少"
B : *quickly* "9!"
A : "你怎麼這麼快就知道答案了"
A : "只要在8的基礎上加1就行了"
A : "所以你不用重新計算因爲你記住了第一個等式的值爲8!"
          動態規劃算法也可以說是 '記住求過的解來節省時間'
3.動態規劃最重要的工具
        表格,對於動態規劃而言,最重要的是記錄之前的運算結果。而表格恰好可以做到這一點,表格之間的位置關係可以很好的記錄計算結果之間的關係,從而達到存儲的目的。
以揹包問題爲例(出自算法圖解)
          假如有一個小偷,現在他來到了一家商店準備年底衝業績,店裏有三件商品可以偷,分別是吉他(1磅)1500元  筆記本電腦(3磅)2000元
音響(4磅)3000元 小偷的只有一個揹包(容量4磅),該如何拿才能獲得最高業績。注意,這裏的商品都是不可分割的,所以貪心算法行不通。
下圖可以很好的解釋動態規劃的原理


4.何時使用動態規劃
a.問題要求最優解;
b.問題可以拆分若干小問題;
c.問題之間存在重疊的子問題。
         還沒有系統的學習過dp,所以只能借鑑CSDN大佬們的文章先了解一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章