什麼是動態規劃

2021-07-06 00:25:50 字數 2194 閱讀 4084

動態規劃(dynamic programming)與分治法相似,都是通過組合子問題的解來求解原問題,動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題。通常按照下面4個步驟來設計乙個動態規劃演算法:

1. 刻畫乙個最優解的結構特徵。

2. 遞迴地定義最優解的值

3. 計算最優解的值,通常採用自底向上的方法

4. 利用計算出的資訊構造乙個最優解

這是演算法導論上的定義,但是這個定義對於初學者來說並沒有很大的幫助,因為不知道如何劃分子問題和刻畫最優解的結構

動態規劃的本質是對問題的狀態的定義轉態轉移方程的定義

動態規劃是通過拆分問題,定義問題狀態和狀態之間的關係,使得問題能夠以遞推(或者說分治)的方式去解決。但如何拆分問題才是動態規劃的核心,而拆分問題靠的是狀態的定義狀態方程的定義

1.1 狀態的定義

現舉乙個列子:

給定乙個數列,長度為n,

求這個數列的最長上公升(遞增)子數列(lis)的長度.以 1

7283

4為例。

這個數列的最長遞增子數列是 123

4,長度為4;

次長的長度為3, 包括 1

78; 1

23 等.

要解決這個問題首先我們需要定義這個問題和這個問題的子問題。

所以我麼重新定義這個問題

給定乙個長度為n的數列。 設f

k 為:以數列中第k項結尾的最長遞增子串行的長度. 求f

1...

fn的最大值

很顯然這個問題與原問題是等價的。

而對於f

k 來說,f1

.. fk

−1都是fk

的子問題:因為以第k項結尾的最長遞增子串行(簡稱lis),包含著以第1 … k 項結尾的lis。

上述問題中fk

稱之為狀態,定義中的」fk

為數列中第k項結尾的lis的長度」就叫做狀態的定義。之所以把fk

叫做」狀態」而不是」問題」,一是因為避免與原問題中」問題」混淆,二是因為這個新問題是數學化定義的。

當然,我們可以使用不同的視角來定義這個問題:

給定乙個長度為n的數列, 設f

i,k 為:

在前i項中,長度為k的最長遞增子串行中,最後一位的最小值。 1≤

k≤n

若在前i項中,不存在長度為k的最長遞增子串行,則fi

,k為正無窮。

求最大的x,使得fn

,x不為正無窮。

這個問題的定義與原問題也是等價的。

上述的fi,

k 就是狀態,定義中的「fi

,k為:在前項中,長度為k 的最長遞增子串行中,最後一位的最小值」就是對狀態的定義。

1.2 什麼是狀態轉移方程?

上述狀態定義好之後,轉態和轉態之間的關係式,就叫做狀態轉移方程

對於lis問題,第一種定義: 設f

k 為:以數列中第k項結尾的最長遞增子串行的長度。

設a為題中數列,轉態轉移方程為: f1

=1(根據定義匯出邊界情況) fk

=max

(fi+

1|ak

>ai

,i∈(

1...

k−1)

(k>1)

文字解釋為:

以第k項結尾的lis的長度是:保證第i項小的情況下,以第i項結尾的lis長度加1的最大值,取遍i的所有值(i小於k).

第二種定義: 設f

i,k 為:在數列前i項中,長度為k的遞增子串行中,最後一位的最小值

設a為題中數列,狀態轉移方程為: 若a

i>fi

−1,k

−1則fi,

k=mi

n(ai

,fi−

1,k)

否則:fi

,k=f

i−1,

k (邊界情況需要分類討論較多,在此不列出,需要根據狀態定義匯出邊界情況。)大家套著定義讀一下公式就可以了,應該不難理解,就是有點繞。

這裡可以看出,這裡的狀態轉移方程,就是定義了問題和子問題之間的關係。

可以看出,狀態轉移方程就是帶有條件的遞推式。

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...

什麼是動態規劃?

一 基本思想 態規劃演算法的基本思想與分治法類似,都是將問題大問題拆分為小問題,通過小問題的求解來得到最後的解。與分治法不同的是,分治法是分而治之,分治法將大問題拆分為相同性質的子問題,最後合併子問題的解來構成最終解。而動態規劃是,將子問題拆解後,按順序求解子問題,前面階段的求解為後一階段提供有用資...

什麼是動態模型

動態模型著重於系統的控制邏輯,考察在任何時候物件及其關係的改變,描述這些涉及時序和改變的狀態。動態模型包括狀態圖和事件跟蹤圖。狀態圖是乙個狀態和事件的網路,側重於描述每一類物件的動態行為。事件跟蹤圖則側重於說明系統執行過程中的乙個特點 場景 也叫做指令碼 scenarios 是完成 系統某個功能的乙...