動態規劃簡介及步驟

2021-10-23 12:20:58 字數 1362 閱讀 4579

一、演算法介紹簡單來說,就是將乙個問題的多階段過程拆分為一系列單階段,逐步遞推,利用各階段間的關係,求出問題的最優解或解法之和。

二、演算法思路

1.遞迴到動歸的一般轉化方法

遞迴函式有n個引數,就定義乙個n維的陣列,陣列下標是遞迴函式引數的取值範圍,陣列元素的指就是遞迴函式的返回值,這樣就可以從邊界值開始,逐步填充陣列,相當於計算遞迴函式值的逆過程。

2.能用動歸解決的問題特點(適用條件)

1)最優子結構性質

如果問題的最優解所包含的子問題的解也是最優的,就稱該問題具有最優子結構性質。

2)無後效性

當前的若干個狀態值一旦確定,則此後過程的演變就只和這若干個狀態的值有關,和之前採取哪種手段或哪種路徑演變到當前的若干個狀態,沒有關係。

3.動歸解題的一般思路

1)將原問題分解為子問題

●把原問題分解為若干個子問題,子問題和原問題的形式相同或類似,只不過規模變小了。

●子問題的解一旦求出就會被儲存,所以每個子問題只需要求解一次。

2)確定狀態

●和子問題相關的各個變數的一組取值,稱為乙個「狀態」。乙個「狀態」對應於乙個或多個子問題,所謂的某個「狀態」下的「值」,就是這個狀態對應的子問題的解。

●所有「狀態」的集合,構成問題的「狀態空間」。「狀態空間」的大小,與用動規解決問題的時間複雜度直接相關。在"數字三角形的例子裡,一共有n*(n+1)/2個數字,所以這個問題的狀態空間裡一共就有n*(n+1)/2個狀態。整個問題的時間複雜度是狀態數目×計算每個狀態所需時間。在數字三角形裡,每個「狀態」只需要經過一次,且在每個狀態上作計算所花費的時間都是和n無關的常數。

●用動態規劃解題,經常碰到的情況是,k個整型變數能構成乙個「狀態」(如數字三角形裡的行號和列號)。如果這k個整型變數的取值範圍分別是n1,n2,…nk,那麼,我們就可以用乙個k維陣列a[n1][n2]…[nk]來儲存各個狀態的「值」。這個「值」未必就是乙個整數或浮點數,也可能是乙個結構。

3)確定一些初始狀態的值

以數字三角形為例,初始狀態就是底邊數字,值就是底邊數字的值。

4)確定狀態轉移方程

定義出什麼是「狀態」,以及在該「狀態」下的「值」後,就要找出不同狀態之間如何遷移-----即如何從乙個或多個值已知的「狀態」,求出另乙個「狀態」的「值」(「人人為我」遞推型)。表示狀態遷移的公式稱為「狀態轉移方程」。

動態規劃簡介

1.定義 動態規劃 dynamic programming 是運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初美國數學r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問題時,提出了著名...

簡介動態規劃

這篇博文其實我是不想 也不敢寫的,因為自己還是半知半解,但又怕自己看了很久的東西和做題得來的體會以後給忘了,所以,還是寫下了。個人水平確實有限,若有錯誤的地方,歡迎指出!參考了 演算法導論 原書第3版 和網上的部落格。一 動態規劃的原理 1 動態規劃的用處 動態規劃與分治法相似,都是通過組合子問題的...

動態規劃解題步驟

動態規劃解題步驟?給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse...