動態規劃 思想

2021-05-11 17:35:41 字數 1176 閱讀 9295

動態規劃:把問題劃分成子問題遞迴求解,並且保留中間結果以避免重複計算子問題的方法,叫動態規劃。(

eg:

三角形路徑數字之和)

關鍵思想:

1,

劃分成若干子問題

2,子問題的狀態,及若干狀態值;狀態的表述。

3,子狀態之間的轉換(即遞迴求解,子狀態到上一級子狀態之間的變換關係),即如何從乙個或多個值已知的狀態,求出另乙個狀態的值。

首先要學會分析問題,劃分成小問題,然後找到最基本最原始,狀態值已知(或一目了然)的問題。再向上遞推可求解!求得原問題的解。

形式是按遞迴思想,但是儲存了子問題的中間結果,避免了許多的重複計算。時間複雜度小。跟狀態空間大小一致。如果需要

k個整形變數來描述乙個狀態,且範圍為

n1,n2…nk.

則可設狀態為

a[n1][n2]..[nk]

最關鍵的是要找到最基本最初始的問題(一目了然知道解得問題)。比如菲波納數列,

f(n)=f(n-1)+f(n-2);

而最基本最初始的狀態為

f(0)=f(1)=1;

當然這個完全可以不用遞迴求解。能用遞迴求解的都可以用非遞迴求解,不過相對複雜沒那麼好理解而已。

eg:問題描述

乙個數的序列bi

,當b1 < b

2 < ... < b

s 的時候,我們稱這個序列是上公升的。對於給定的一

個序列(a

1, a

2, ..., an)

,我們可以得到一些上公升的子串行

(ai1

, ai2

, ..., aik)

,這裡1 <= i1 < i2 < ... <

ik <= n

。比如,對於序列

(1, 7, 3, 5, 9, 4, 8)

,有它的一些上公升子串行,如

(1, 7), (3, 4, 8)

等等。這些子串行中最長的長度是

4,比如子串行

(1, 3, 5, 8).

你的任務,就是對於給定的序列,求出最長上公升子串行的長度。 解略

動態規劃思想

1 解決問題 分治 用有限的計算能力處理大規模問題的基本手段 1.1 遞迴 問題的解決方法包含遞迴部分和非遞迴部分,非遞迴部分解決問題的一部分,減少問題規模,而遞迴部分將形式不變,但減小了規模的問題傳遞到下一輪解決中去。這樣,每一輪處理,問題都有一部分 規模 得到解決,一直遞迴下去 直到終止條件 直...

動態規劃的思想

動態規劃 dynamic programming 演算法是解決多階段決策過程最優化問題的一種常用方法,難度比較大,技巧性也很強。利用動態規劃演算法,可以優雅而高效地解決很多貪婪演算法或分治演算法不能解決的問題。動態規劃演算法的基本思想是 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後...

動態規劃 詳解思想步驟

1 求解動態規劃問題的基本步驟和思想 動態規劃的式子都是狀態p由狀態q1 q2 q3 之中選擇乙個或幾個計算出來的形式,但是如果一直是一些狀態這樣遞迴下去,最後會無限迴圈的,所以每個式子一直寫下去最後都會得到一些狀態p是常數 遞迴邊界 的形式。以上可構造乙個dag 自底向上就是已經知道了所有遞迴邊界...