動態規劃詳解 第一章

2021-05-26 05:21:42 字數 2244 閱讀 6388

首先讓我們看乙個例子:

例1:如下圖有乙個數字三角陣,請編乙個程式計算從頂點至底的某處的一條路徑,使該路徑所經過的數字的和最大。每一步可沿左斜線向下或右斜線向下走。

75  3

4  2  1

2  1  3  7

這個問題的實質實際上是乙個有向圖中最長路經問題,可以用經典的圖論演算法或者搜尋來解決。

考慮如何用搜尋法來解這道題,從第乙個點開始擴充套件,每次擴充套件2個可行節點,直到達到數字三角形的底部,從所有的可行路徑中找出最優值,這樣做的複雜度是o(2^n),當n很大的時候,普通的搜尋法將不可行。

觀察發現,搜尋的效率低下很大程度上是因為做了大量的重複運算,因為對於任何乙個節點,從他開始向下拓展的最優值是確定的,這啟發了我們應當充分利用之前的運算結果。

下面我們來進行深入的分析,假如已經走第i行第j列,此時最大累加和s[i,j]應選s[i-1,j],s[i-1,j+1]中較大者再加上(i,j)處的值a[i,j],即下式

s[i,j]=a[i,j]+max(s[i-1,j],s[i-1,j+1])

所以我們可以從第一行開始,向下逐行推出每一處位置的最大累加和s,最後從底行的n個s中選出最大的乙個即為所求,這種演算法的複雜度為o(n^2),比較搜尋法,已經大大的降低了,這種充分利用已經計算出結果的方法,就叫做動態規劃。

通過上面的例子,我們對「動態規劃」有了乙個初步認識,它所處理的問題是乙個「多階段決策問題」。我們現在對一些概念進行具體定義:

狀態(state):它表示事物的性質,是描述「動態規劃」中的「單元」的量。如例1中的每個節點(指節點處的最大值)都為單個的狀態。

階段(stage):階段是一些性質相近,可以同時處理的狀態集合。通常,乙個問題可以由處理的先後次序劃分為幾個階段。如例1中的問題,每一行若干節點組成乙個階段。乙個階段既可以包含多個狀態,也可以只包含乙個狀態。描述各階段狀態的變數稱為狀態變數,例1中可用s[4 , j]來表示第四階段(即第四行)走到第j列的最大值,即第四階段狀態變數。

狀態轉移方程:是前乙個階段的狀態轉移到後乙個的狀態的演變規律,是關於兩個相鄰階段狀態的方程,是「動態規劃」的中心。

如例1中: s[i,j]=a[i,j]+max(s[i-1,j],s[i-1,j+1])

決策(decision):每個階段做出的某種選擇性的行動。它是我們程式所需要完成的選擇。如例1中max(s[i-1,j],s[i-1,j+1])

動態規劃所處理的問題是乙個「多階段決策問題」,一般由初始狀態開始,通過對中間階段決策的選擇,達到結束狀態。這些決策形成了乙個決策序列,同時確定了完成整個過程的一條活動路線(通常是求最優的活動路線)

從上面的講解我們可以發現:動態規劃並不像一種演算法,而更像一種思考方式

下面,我們來討論動態規劃的應用範圍,要確定乙個問題是否能用動態規劃,需要考慮兩個方面:

一:最優子結構

即乙個問題的最優解只取決於其子問題的最優解,也就是說,非最優解對問題的求解沒有影響。我們再來看乙個問題:

例二:有4個點,分別是a、b、c、d,相鄰兩點用兩條連線,表示兩條通行的道路,給出每條道路的長度。我們定義從a到d的所有路徑中,長度除以4所得餘數最小的路徑為最優路徑。求一條最優路徑。

很多初學者往往會認為這道題也可以採用動態規劃的方法,但實際並不如此,考慮這種情況

假如a-b的兩條道路分別為2,3,b-c的兩條道路分別為1,4。如果採用動態規劃,節點b的最優值為2,節點c的最優值2,但際上到達c的最優值應該是0,即3-1這條線路。

也就是說,c的最優取值不是由b的最優取值決定的,其不具有最優子結構。

由此可見,並不是所有的「決策問題」都可以用「動態規劃」來解決。所以,只有當乙個問題呈現出最優子結構時,「動態規劃」才可能是乙個合適的侯選方法。

二:無後效性

即乙個問題被劃分階段後,階段i中的狀態只能由階段i-1中的狀態通過狀態轉移方程得來,與其他狀態沒有關係,特別是與未發生的狀態沒有關係,這就是無後效性。

<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>

經典題目推薦:

1.最長不下降子串行 o(n^2)版本

2.最長公共子串行

3.最小字母代價樹

4.石子合併

5.最優二叉樹

6.工作安排

7.揹包問題

8.加分二叉樹

9.錢幣問題

第一章 線性規劃

注意 請安裝 tex all the things 這款chrome瀏覽器外掛程式才能正確顯示公式。鏈結如下 一 線性規劃的matlab標準形式及軟體求解 begin begin x end end begin a cdot le b aeq cdot beq lb le le ub end rig...

python第一章筆記 第一章 基礎

參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...

第一章 人力資源規劃

1.答 1 崗位分析為企業選拔 任用合格的員工奠定了基礎。2 崗位分析為員工考核 晉公升提供了依據。3 崗位分析成為企業改進崗位設計 優化勞動環境的必要條件。4 崗位分析是企業制定有效的人力資源計畫,進行人才 的重要前提。5 崗位分析是崗位評價的基礎,而崗位評價又是建立 健全企業薪酬制度的重要步驟。...