DP 動態規劃演算法的設計步驟及解題思想

2021-09-12 05:30:49 字數 911 閱讀 7624

則問題就無法求解;

b、確定狀態和狀態變數:將問題發展到各個階段時所處於的各種客觀情況用不同的狀態表示出來。當然,狀態的選擇要滿足無;後效性;

c、確定決策並寫出狀態轉移方程:因為決策和狀態轉移有著天然的聯絡,狀態轉移就是根據上一階段的狀態和決策來匯出本階段的狀態。所以,如果確定了決策,狀態轉移方程就可以寫出。但事實上常常是反過來的,根據相鄰兩個階段的狀態之間的關係來確定決策方法和狀態轉移方程。

d、尋找邊界條件:給出的狀態轉移方程是乙個遞推式,需要乙個遞推的終止條件或邊界條件。

對於上述的步驟可以概括為:

1、分析最優解的性質,並刻畫其結構特徵;

2、遞迴的定義最優解;

3、自底向上或自頂向下的記憶化方式計算出最優值;

4、根據計算最優值時得到的資訊,構造問題的最優解;

五:具體演算法實現的說明:

動態規劃的主要難點在於理論上的設計,也就是上面4個步驟的確定,一旦設計完成,實現部分就會非常的簡單。

使用動態規劃求解問題,最重要的是:確定動態規劃的三要素:

1、問題的階段 2、每個階段的狀態 3、從前乙個階段轉換到後一階段 之間的遞推關係。

遞迴關係必須是從次小的問題開始到較大的問題之間的轉換,從這個角度來說,動態規劃往往可以用遞迴程式來實現,不過因為遞迴可以充分利用前面儲存的子問題的解來減少重複計算,所以對於大規模問題來說,有遞迴不可比擬的優勢,這也是動態規劃的核心之處。

確定了動態規劃的這三要素,整個求解過程就可以用乙個最優決策表來描述,最優決策表是乙個二維表,其中行表示決策的階段,列表示問題的狀態,**需要填寫的資料一般對應此問題的在某個階段某個狀態下的最優值(如:最短路徑,最長公共子串行,最大值等),填表的過程就是根據遞推關係,從1行1列開始,以行或者列優先的順序。依次填寫**,最後根據整個**的資料通過簡單的取捨或者運算求得問題的最優解。

f(n,m) = max

動態規劃演算法(DP)

動態規劃演算法採用分治演算法的思想,將原問題分成若干個子問題,然後分別求解各個子問題,最後將子問題的解組合起來得到原問題的解。分治演算法遞迴地求解各個子問題,可能重複求解某些子問題。與分治演算法不同的是,動態規劃演算法不是遞迴地求解各個子問題,它是從簡單問題的解入手,逐步求解,直至求解出原問題。動態...

動態規劃演算法

一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...

動態規劃演算法

動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...