動態規劃2

2021-04-07 09:14:08 字數 2155 閱讀 1827

動態規劃是研究一類最優化問題的方法,在經濟、工程技術、企業管理、工農業生產及軍事等領域中都有廣泛的應用。近年來,在acm/icpc中,使用動態規劃(或部分應用動態規劃思維)求解的題不僅常見,而且形式也多種多樣。而在與此相近的各類資訊學競賽中,應用動態規劃解題已經成為一種趨勢,這和動態規劃的優勢不無關係。

1、動態規劃的常用名詞

在學習動態規劃之前,先得對下面的名詞有所了解。本書將標準名詞作了一些簡化,便於大家更好的理解。

(1)狀態(**te)

對於乙個問題,所有可能到達的情況(包括初始情況和目標情況)都稱為這個問題的乙個狀態。

(2)狀態變數(sk)

對每個狀態k關聯乙個狀態變數sk,它的值表示狀態k所對應的問題的當前解值。

(3)決策(decision)

決策是一種選擇,對於每乙個狀態而言,你都可以選擇某一種路線或方法,從而到達下乙個狀態。

(4)決策變數(dk)

在狀態k下的決策變數dk的值表示對狀態k當前所做出的決策。

(5)策略

策略是乙個決策的集合,在我們解決問題的時候,我們將一系列決策記錄下來,就是乙個策略,其中滿足某些最優條件的策略稱之為最優策略。

(6)狀態轉移函式(t)

從乙個狀態到另乙個狀態,可以依據一定的規則來前進。我們用乙個函式t來描述這樣的規則,它將狀態i和決策變數di對映到另乙個狀態j,記為t(i,di)=j

(7)狀態轉移方程(f)

狀態轉移方程f描述了狀態變數之間的數學關係。一般來說,與最優化問題相應,狀態轉移方程表示si的值最優化的條件,或者說是狀態i所對應問題的最優解值的計算公式,用代數式表示就是:

si=f()

2、最優化原理

2023年美國數學家r.bellman等人,根據一類多階段問題的特點,把多階段決策問題變換為一系列互相聯絡的單階段問題,然後逐個加以解決。一些靜態模型,只要人為地引進「時間」因素,分成時段,就可以轉化成多階段的動態模型,用動態規劃方法去處理。與此同時,他提出了解決這類問題的「最優化原理」(principle of optimality):

「乙個過程的最優決策具有這樣的性質:即無論其初始狀態和初始決策如何,其今後諸策略對以第乙個決策所形成的狀態作為初始狀態的過程而言,必須構成最優策略」。簡言之,乙個最優策略的子策略,對於它的初態和終態而言也必是最優的。

這個「最優化原理」如果用數學化一點的語言來描述的話,就是:假設為了解決某一優化問題,需要依次作出n個決策d1,d2,…,dn,如若這個決策序列是最優的,對於任何乙個整數k,1 < k < n,不論前面k個決策是怎樣的,以後的最優決策只取決於由前面決策所確定的當前狀態,即以後的決策dk+1,dk+2,…,dn也是最優的。

最優化原理是動態規劃的基礎。任何乙個問題,如果失去了這個最優化原理的支援,就不可能用動態規劃方法計算。

3、什麼是動態規劃

動態規劃是運籌學的乙個分支。與其說動態規劃是一種演算法,不如說是一種思維方法來得更貼切。因為動態規劃沒有固定的框架,即便是應用到同一道題上,也可以建立多種形式的求解演算法。許多隱式圖上的演算法,例如求單源最短路徑的dijkstra演算法、廣度優先搜尋演算法,都滲透著動態規劃的思想。還有許多數學問題,表面上看起來與動態規劃風馬牛不相及,但是其求解思想與動態規劃是完全一致的。

因此,動態規劃不像深度或廣度優先那樣可以提供一套模式,需要的時候,取來就可以使用;它必須對具體問題進行具體分析處理,需要豐富的想象力去建立模型,需要創造性的思想去求解。

4、動態規劃適於解決什麼樣的問題

準確地說,動態規劃不是萬能的,它只適於解決一定條件的最優策略問題。

或許,大家聽到這個結論會很失望:其實,這個結論並沒有削減動態規劃的光輝,因為屬於上面範圍內的問題極多,還有許多看似不是這個範圍中的問題都可以轉化成這類問題。

上面所說的「滿足一定條件」主要指下面兩點:

(1)狀態必須滿足最優化原理;

(2)狀態必須滿足無後效性。

所謂的無後效性是指:「過去的決策只能通過當前狀態影響未來的發展,當前的狀態是對以往決策的總結」。

這條特徵說明什麼呢?它說明動態規劃適於解決當前決策和過去狀態無關的問題。狀態,出現在策略的任何乙個位置,它的地位都是相同的,都可以實施同樣的決策。這就是無後效性的內涵。 

5、用動態規劃解題的好處

說了這麼多的動態規劃,它到底給我們解題能帶來什麼好處呢?

其實動態規劃的最大優勢在於它具有極高的效率,而且動態規劃還有其他的優勢,例如:動態規劃可以得出一系列解,演算法清晰簡便,程式易編、易調,等等。

動態規劃(2)

題目輸入格式 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2.r 1行 每行c個數,表示這個矩陣。輸出格式 僅一行 輸出1個整數,表示可以滑行的最大長度。樣例輸入 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 ...

動態規劃2

最長遞增子串行的問題 給定陣列arr,返回arr的最長遞增子串行長度。比如arr 最長遞增子串行為,返回arr的最長遞增子串行長度。比如arr 最長遞增子串行為所以返回這個子串行的長度為5。解決方案 arr 2 1 5 3 6 4 8 9 7 dp 1 1 2 2 3 3 4 5 4 dp i 表示...

動態規劃 2

飛彈攔截 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度...