演算法學習筆記 動態規劃

2021-10-22 11:44:16 字數 1442 閱讀 9542

在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分成若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。因此各個階段決策的選取不能任意確定,它依賴於當前面臨的狀態,又影響以後的發展。當各個階段決策確定後,就組成乙個決策序列,因而也就確定了整個過程的一條活動路線.這種把乙個問題看作是乙個前後關聯具有鏈狀結構的多階段過程就稱為多階段決策過程,這種問題稱為多階段決策問題。在多階段決策問題中,各個階段採取的決策,一般來說是與時間有關的,決策依賴於當前狀態,又隨即引起狀態的轉移,乙個決策序列就是在變化的狀態中產生出來的,故有「動態」的含義,稱這種解決多階段決策最優化的過程為動態規劃方法

動態規劃的演算法思想與分治法想有相似之處,但又不完全相同。分治法是將乙個大問題分解成若干小問題,從上往下求解各個子問題的解,最終得到所有的問題的解。而動態規劃也是吧大問題分解成若干的小問題,然後從下到上,先解決最小的問題,把結果存放到**中,然後再去求解規模較大的問題。大問題的解是從小問題的結果獲取的,是通過查表的方式得到的,有效的避免的重複計算的問題。

1:最優子結構

指的是乙個問題他的最優解是由無數個子問題的最優解構成的,要想使用動態規劃,最優子結構是必不可少的條件。

2:子問題重疊

指的是構成問題的子問題之間獨有重疊的部分,計算出乙個子問題的結果,存放起來,其他子問題中的重複部分就不必再算,直接查詢便可。但它可與可無,即沒有子問題重疊的問題也可用動態規劃實現求解。

1:分析結構特徵

2:建立最優值的遞迴式

3:自底向上計算最優解,並記錄

4:構造最優解

1:分析結構

斐波那契數列的前兩項都是1,而且從第三項開始,每一項的值為前兩項的和,假設每一項的值是乙個子問題,那麼第n項的值就是前n-1項與前nn-2項的和。

2:建立最優解的遞迴表示式

f[n]

=f[n-1]

+f[n-2]

(n>=

2)f[0]

=0f[1

]=1

3:計算最優解

f(1

)=1;

f(2)

=1;f

(3)=

f(1)

+f(2

)=2;

f(4)

=f(3

)+f(

2)=3

;...

.f(n)=

f(n-1)

+f(n-2

)

**為:

int

fib(

int n)

return f[i]

;}

遞迴寫法

int fib(int n)

else

if(n==

1&&n==2)

else

}

演算法學習 動態規劃

動態規劃是解決多階段決策過程最優化的一種方法。對於離散問題,解析數學無法施展,動態規劃則成為非常有效的工具。兩個弱點 1.得出目標函式方程後,尚無統一的處理方法,必須根據具體問題的性質結合相應的數學技巧來求解 2.維數障礙。動態規劃模型的分類 根據決策過程的時間參量是離散的還是連續的變數 1.離散 ...

演算法學習 動態規劃實踐

完成日期 2017.10.26 1.實踐題目 數字三角形 2.問題描述 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。3.演算法描述 1 首先該問題有最優子結構和重疊子問題的性質,因...

演算法學習08 動態規劃

遞迴問題 暴力遞迴轉換成動態規劃 動態規劃本身就是暴力遞迴的優化,是一種用空間換時間的策略 動態規劃 我們不知道怎麼計算n 但我們知道 n 與 n 1 之間存在一定關係n n n 1 得到遞推的狀態轉移公式.當暴力遞迴到頭得到0 1,得到base case,這樣得到了遞迴的方法.public sta...