華電北風吹
天津大學認知計算與應用重點實驗室
日期:2015/12/7
近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。
目前所見動態規劃可以劃分為兩類:鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。
一、鏈式動態規劃
鏈式動態規劃的題目型別還是比較多的,例如斐波那契數列求解,最大鋼管價值切割,完美覆蓋問題,狀態壓縮動態規劃,0/1揹包問題,最長公共子串行。其中的完美覆蓋問題和最長公共子串行問題又可以稱作矩陣類問題,但是求解方法滿足鏈式動態規劃的的一般思想。
1、斐波納契數列的求解和最大鋼管價值切割
這兩個可以歸為一類問題,也有很多問題可以歸為這一類。這屬於最簡單的動態規劃問題。說簡單是因為每個節點的狀態用乙個數就可以表示。其中,斐波那契數列求解的鍊錶長度是項序數n,就是從1到n,每個數字都是鍊錶的乙個節點,最大鋼管價值切割定義以鋼管長度為鍊錶的鏈式結構。
2、完美覆蓋問題
以行(列)的所有可能形式定義每個節點的狀態,以列(行)為鏈,建立鏈式動態規劃。
3、狀態壓縮動態規劃
這種型別的問題的特點是行數任意,列數不能太多,因此可以以列建立鏈式結構,行的所有狀態建立狀態集合,然後根據具體問題的具體要求建立狀態轉移函式。
4、0/1揹包問題
以所有可能的價值為每個節點的狀態,以物品為鏈建立鏈式動態規劃。
5、最長公共子串行
分別以兩個序列的元素順序建立二維陣列,二維陣列裡面的每個元素記錄當前節點的最長公共子串行的長度和最後乙個元素的值。以行為狀態,列為鍊錶,依次更新每個節點的狀態(也可以行列旋轉)。
二、樹形動態規劃
樹形動態規劃是鏈式動態規劃的擴充套件。從根節點至葉子節點的每條路徑在形式結構上與鏈式動態規劃類似,樹形動態規劃區別於鏈式動態規劃的是他的狀態轉移依賴於他的所有葉子節點(鏈式可以看作只有乙個子節點的樹形)
三、動態規劃解題技巧
1、動態規劃基本思路是空間換時間。
適合於動態規劃求解的問題必滿足兩個形式:最優子結構和子問題重疊。子問題重疊使得我們可以儲存子問題的解,防止多次計算,最優子結構使得儲存的子問題的解是有效的,可以積小為大。
2、解決動態規劃類問題關鍵點是每個節點狀態的定義和狀態轉移函式的確定。
在理解了本文前面總結的以後節點狀態的定義肯定不是問題,那麼就要確定節點之間的狀態轉移,這裡我的建議是手工算幾個例子,算了以後能夠更加快速和深入的理解狀態轉移過程。
3、狀態轉移的因果性和後效性。
目前大部分的狀態轉移都是子問題的最優結構影響包含該子問題的問題的求解,可以稱此為因果性。這方面的例子有斐波那契數列求解,最大鋼管價值切割,完美覆蓋問題,狀態壓縮動態規劃,0/1揹包問題,最長公共子串行。
也有後效性的動態規劃,當前狀態影響的是在此節點後面節點的狀態,可以稱此為後效性。這方面的例子有跳躍遊戲
狀態轉移的時候可能要結合很多其他的知識,比如廣度優先搜尋,位運算等等技巧。
4、鏈式求解順序
大部分的題目都是對鍊錶上節點的狀態按從前往後的順序更新每個節點的所有狀態,例如本文所涉及的所有動態規劃問題。
動態規劃 總結
動態規劃是解決多階段決策問題的一種方法。如果一類問題的求解過程可以分為若干個互相聯絡的階段,在每乙個階段都需作出決策,並影響到下乙個階段的決策,從而確定了乙個過程的活動路線,則稱它為多階段決策問題。思想 在做每一步決策時,列出各種可能的區域性,解依據某種判定條件,捨棄那些肯定不能得到最優解的區域性解...
動態規劃總結
一 知識點整理 一 動態規劃是解決多階段策略問題的一種方法,運用最優性原理,排除重複計算,用空間換時間的演算法。二 動態規劃適用的題目型別有以下幾個特點 1.問題具有多階段的決策 2.每個階段對應乙個狀態 狀態變數 3.每個階段有乙個決策 不同的決策導致下乙個階段不同的狀態 4.每個階段的最優解可以...
動態規劃總結
動態規劃是一種解決最優化問題的方法,動態規劃最大的特點是變化多端,解題方法不是按照一定套路來的。動態規劃一般是能分階段的問題,可以把大問題轉化為小問題,充分利用計算機重複處理問題的特點,把這個問題解決掉。並且動態規劃中的變數都是有一定含義的,每個變數都有它所包含的意思,比如 在最長上公升子串行這個題...