动态规划基本思想
基本要素:
(1)最優子結構性質
(2)重疊子問題性質
思想:
動態規劃和分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然后從這些子問題的解得到原問題的解。
與分治法不同的是,動態規劃法中分解得到的子問題不是互相獨立的。若用分治法來解這類子問題,分解得到的子問題數目非常多,最后解決原問題需要耗費指數時間。但是這些子問題有很多是相同的,也就是同一個子問題被計算了很多次,不同子問題的數量可能只有多項式量級。
如果我們保存已經解決的子問題的解,需要解相同子問題時找出已經計算出的解,這樣可以減少大量重復計算,最終得到多項式時間算法。
經常用一個表來記錄所有已解決的子問題的解。不管該子問題以后是否被利用,只要它被計算過,就將其結果填入表中。這就是動態規劃的基本思想。具體的動態規劃算法多種多樣,但它們具有相同的填表格式。
—(計算機算法設計與分析 第四版 王曉東)—
####動態規劃例子:(矩陣連乘問題)
給定N個矩陣{A1,A2,A3,An},其中Ai與A(i+1)是可以相乘的,考察這N個矩陣的連乘積A1A2,An。
由于矩陣乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這種計算次序可以用加括號的方式來確定,比如下面4個矩陣的連乘積。
A1,A2, A3, A4
1,(2,(3,4))
1,((2,3),4)
(1,2),(3,4)
(1,(2,3)),4
((1,2),3),4
#####最優解的結構
計算A[1:n]的最優次序所包含的計算矩陣子鏈A[1:k]和A[k+1:n]的次序也是最優的。
A[1:n] = A[1:k] * A[K+1:n] 其中 ( 1 < k < n)
遞推關系如下:
m(i , j) = 0 ,(i=j)
m(i , j) = min{ m(i,k) + m(k+1,j) + P(i-1)P(k)P(j) } ,(i < j )
#####重疊子問題
重疊的子問題主要體現在m表格里,
例題:我們計算如下6個矩陣的連乘積,
A1 ------ A2 ------ A3 ----- A4 ----- A5 ----- A6
(3035) (3515) (155) (510) (1020) (2025)
總結
- 上一篇: 动态规划——数塔问题
- 下一篇: scanf( )函数的返回值