第十五章動態規劃

2022-05-12 09:03:01 字數 4642 閱讀 7884

一、動態規劃簡介

動態規劃演算法(dynamic programming,簡稱dp)是資訊學奧賽中重點考察的基本演算法,每年的各模擬賽中經常會有動態規劃的題目出現,並且頻率相當高。所以參賽選手們必須準確、熟練地掌握這一演算法。

動態規劃演算法是解決「多階段決策問題」的一種高效演算法,它對每個出現的問題只求解一次,並將其結果儲存在一張表中,以後再次遇到相同的問題時,直接從表中索取答案,避免重複計算。正是這種「不做無用功」的求解模式,大大提高了程式的效率。動態規劃演算法常用於解決統計類問題(統計方案總數)和最優值問題(最大值或最小值),尤其普遍用於最優化問題。

本章主要介紹了動態規劃的基本概念、動態規劃的問題特徵以及求解方法和技巧心得,並通過分析一些典型的題目來說明動態規劃類問題的基本解題思路。

二、動態規劃的基本概念

下面,我們通過分析乙個例項來對動態規劃演算法有乙個初步的認識,並了解階段、狀態、決策等基本概念。

最短路線問題

如圖15-1所示,宇宙中存在著大大小小的星球,星球之間存在著縱橫交錯的飛船通道。夢佳揹負著巨大的使命,需要盡快從星球a趕到星球e執行任務。請你幫助她找到一條最短的路線。

圖15-1 最短路線圖

問題分析:

經過觀察,容易發現本問題有一明顯的特點,就是在從星球a到星球e的路徑上,結點可按從左向右的順序分為5部分:

第一部分:a;

第二部分:b1,b2;

第三部分:c1,c2,c3,c4;

第四部分:d1,d2,d3;

第五部分:e。

顯而易見,想盡快到達星球e,必須始終從左到右單向(也就是按照第一部分到第五部分依次增加的順序)前進,如果出現從右向左前進的路線,則結果必然不是最優的。

既然只能從左向右單向前進,那麼從a點到其他任意一點x的最短距離,必然經過且僅經過x左側的點(設為y)。因此,如果能提前求得由a到y的最短距離,那麼列舉x的所有前驅點y,就可以計算出a到x的最短距離。所以,按照空間順序從左到右的順序劃分階段,我們就可以按階段一步步求得從a到e的最短路徑了。

演算法描述:

定義f[i]為a到i點的最短距離,dis[i,j]為結點i與結點j之間的距離。

我們從第一部分開始從左向右依次求a到其他各點的最短距離,每一部分看成乙個階段,每到乙個新的階段就把相應結點的f[i]值求出來,直到求完第五階段結點e的f[e],f[e]也就是我們希望得到的答案。

按照上面的思路,下面我們手動模擬,求解點a到點e的最短距離。

第一階段:f[a] = 0;

第二階段:f[b1] = dis[a,b1] = 5, f[b2] = dis[a,b2] = 3;

第三階段:f[c1] = f[b1]+dis[b1,c1] = 6,

f[c2] = min= min = 11,

f[c3] = f[b1]+dis[b1,c3] = 5+3 = 8,

f[c4] = f[b2]+dis[b2,c4] = 3+4 = 7;

第四階段:f[d1] = min = min =11,

f[d2] = f[c1]+dis[c1,d2] = 6+6 = 12,

f[d3] = min = min = 10;

第五階段:f[e] = min

= min = 13;

最短路徑:a-->b2-->c4-->d3-->e;

最短距離:13。

通過上述求解過程,我們可以看出,在本例中,對每乙個出現的問題(f[i])只求解一次,不做重複計算,以後再遇到時直接使用,這就是動態規劃演算法高效的原因,更是學習動態規劃演算法必須深刻理解的一點。

解決了上述最短路徑問題,下面我們了解一下動態規劃中常見的幾個概念:

1.階段

階段是為了方便解決問題人為劃分的。把問題的求解過程恰當地按一定順序分成若干個相互聯絡的階段,從而按相對應的次序去求解問題。

階段一般依據時間或者空間劃分,上面的例子就是按照空間來劃分階段的,一共5個階段,a點是第一階段,e點是第五階段。在生活中有許多劃分階段的例子,如計算機的使用,可按照時間順序劃分為開啟電源開關、啟動計算機、正常使用計算機、用完後關機等幾個階段。

階段劃分是動態規劃中最重要的環節,階段劃分不當或者錯誤,就會導致題目難度劇增或得出錯誤的結果。因此,正確劃分階段是解決動態規劃問題的重中之重。另外,如果乙個問題無法劃分合適的階段,那它或許就無法使用動態規劃演算法解決。

2.狀態

通常乙個階段有多個狀態,狀態可以用一組數來描述。在定義狀態時,要做到「不多不少恰恰好」。冗餘的狀態會影響程式的效率,狀態殘缺會導致答案錯誤,所以如何設計狀態是近年dp問題考察的重點。

動態規劃的優化方法之一就是基於減少狀態數量這一基本思路來達到降低程式複雜度,減少程式執行時間的目的。

3.決策

乙個階段的狀態給定以後,從該狀態演變到下一階段某個狀態的一種選擇(行為)稱為決策。如在圖15-1中,由c1點到達e點有兩種可選決策(c1→d1→e 和 c1→d2→e),每一階段採取的決策都是從當前狀態選擇一條最短路到下一階段。

三、動態規劃問題的特徵

動態規劃有三大重要特徵:重疊子問題、最優子結構(最優化原理)和無後效性原則。

1.重疊子問題

在解決整個問題前,需要先解決其子問題,要解決這些子問題,又需要先解決它們的子子問題,而這些子問題又非相互獨立,它們重疊交織在一起,我們把這些重複的子問題稱為重疊子問題。在圖15-1中所示的問題中,想要求解由a到e的最短距離,需要知道由a到d1、由a到d2的最短距離,而在解決這兩個子問題時,又都需要知道由a到c1的最短距離,所以a到c1的最短距離就是乙個重疊子問題。

動態規劃演算法正是利用了這種重疊子問題的性質,對每乙個子問題只求解一次,而後將其解儲存在乙個表中,當再次碰到同樣的問題時直接查表就可得到答案,不需重複計算。查表的時間是常數,遠小於重新計算所花費的時間,動態規劃就是利用這一特性,節省程式執行時間,大大提高了程式效率。

2.最優子結構(最優化原理)

把乙個大問題劃分成多個子問題,這些子問題的最優解在求解當前問題之前已經求出。如果這個大問題的最優解中包含了子問題的最優解,則稱該問題具有最優子結構,也稱最優化原理。在圖15-1的例子中,a→b2→c4→d3→e是由a到e的諸多路徑中最短的一條路徑,同時a→b2→c4→d3也是由a到d3的諸多路徑中最短的一條,這就滿足了最優子結構原理:

當前問題的最優解包含子問題的最優解。

3.無後效性原則

無後效性原則是指已經求得的狀態,不受未求狀態的影響。

在圖15-1的問題中,一旦求得了某兩點之間的最短距離,後面階段的其他點就不會對他產生影響。比如一旦求得a到c3的最短距離,其值不會受d2或e點的影響,若某值受後來值的影響,則稱其存在後效性。

無後效性是運用動態規劃演算法的前提,因為只有無後效性的問題才能順利劃分階段。如果無法劃分階段,自然不能使用動態規劃演算法了。所以,在使用動態規劃演算法前,必須謹慎判斷所求問題是否具有後效性。

動態規劃問題的求解過程可分為以下兩個步驟:

一、分析問題,建立模型

(1)構造問題所對應的過程。

(2)判斷問題是否具有重疊子問題、最優子結構性質,是否符合無後效性原則。若不滿足條件,則不能使用動態規劃演算法。

(3)為問題劃分階段,設計狀態。

(4)根據狀態建立狀態轉移方程(遞推公式)。

(5)分析時空複雜度是否滿足要求。

(6)如果(5)不滿足要求,則對其進行優化,重寫方程。

(7)找出問題的邊界,預處理,設定目標狀態。

對於圖15-1中求a點到e點之間的最短路問題,很明顯具有重疊子問題、最優子結構性質,而且滿足無後效性原則,所以可以利用動態規劃解決。

按照空間劃分階段後,定義f[i]為a到i點的最短距離,於是建立狀態轉移方程:

f[i]:= min(f[k]+dis[k,i]) (條件:k是i的前驅)

預處理:f[a]:=0; f[其他的點]:=inf(正無窮);

目標狀態:f[e]。

完成上述準備工作之後,就可以求解了。

二、演算法實現

1.記憶化搜尋

記憶化搜尋是一種直接求解的方法。在遞迴求解時,先判斷該子問題是否求過,如果求過,就直接呼叫之前求過並記錄下來的解,否則就遞迴求解該子問題,求解完後儲存這個解,以備後用。

樹型結構的問題一般多採用記憶化搜尋。

2.遞推

先求小的子子問題,再計算大的子問題,最終把目標問題解決。常見的動態規劃問題基本上都是採用遞推的方式實現。

關鍵:在求某個子問題時,需要用到的子子問題都必須是已經求解過了的,否則有可能出錯。

在使用遞推求解問題時,根據題目的特點擊擇順推還是倒推。

假設用k表示階段,u表示狀態,x表示決策,則:

順推:f[u1]=初始值;

for k←2 to n do列舉階段

for u取遍所有狀態 do列舉狀態

for x取遍所有決策 do列舉決策

f[uk]=opt};//l[uk-1,xk-1]}:狀態uk-1通過策略xk-1到達

//狀態uk的費用

輸出目標:f[un]。

倒推:f[un]=初始值;

for k←n-1 downto 1 do列舉階段

for u取遍所有狀態 do列舉狀態

for x取遍所有決策 do列舉決策

f[uk]=opt;//l[uk,xk]}:狀態uk通過策略xk到達狀態uk+1

//的費用

輸出目標:f[u1]。

採取什麼樣的方法實現好,要根據具體問題的結構特點進行選擇。

動態規劃有多種多樣的題目,但通常按照狀態可分為以下幾類:線性動態規劃、座標類動態規劃、區間動態規劃、揹包資源類動態規劃、樹型動態規劃等,每種模型都有其獨有的特徵。

第十五章控制方法

22 是對反映企業資金運動過程及其結果的會計記錄及財務報行審核 鑑定,以判斷其真實性和可靠性,從而為控制和決策提供依據。23 預算控制是根據預算規定的 與 標準來檢查和監督各門的生產經營活動。24 常用的控制方法有和 25 我們可以把企業看成這樣乙個動態過程 企業首先獲得 和等投人,經過企業系統的轉...

中財第十五章

第十五章資產負債表 第一節資產負債表的概念和作用 一 資產負債的概念和編制原理 債務狀況表 靜態報表 靜態要素報表 二 資產負債表的作用及缺陷 1.資產負債表的作用 1 可以提供某一日期資產總額及其分布狀況 2 可以提供企業短期償債能力資訊 3 可以提供企業長期償債能力及資本結構的資訊 4 可以提供...

第十五章環境成本管理

一 單項選擇題 1 環境問題從經濟學角度來看是 a 供給過剩 b 經濟增長 c 資源配置 d 過度消費 2 環境方面的國際管理標準是什麼?a iso9001 b iso9002 c iso14000 d iso15000 3 下列說法中錯誤的是 a.環境成本事後管理法的著眼點在於現有生產過程中發生的...