日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划基本思想

發布時間:2024/7/23 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划基本思想 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本要素:
(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)

const int N = 6; int table[N + 1][N + 1]; int p[N + 1] = { 30, 35, 15, 5, 10, 20, 25 }; void MatrixMulti() {for (int r = 2; r <= N; r++) //r表示連乘矩陣的個數{for (int i = 1; i <= N - r + 1; i++) //i表示起始矩陣索引{int j = i + r - 1; //j表示終止矩陣索引for (int k = i; k < j; k++){int temp = table[i][k] + table[k+1][j] + p[i - 1] * p[k] * p[j];table[i][j] = (table[i][j] == 0) ? temp : min(table[i][j], temp);}}} } int main() {MatrixMulti();cout << "最小乘積為:" <<table[1][N] << endl;return 0; } /*輸出結果: 最小乘積為:15125 table數組內容為: 0 0 0 0 0 0 0 0 0 15750 7875 9375 11875 15125 0 0 0 2625 4375 7125 10500 0 0 0 0 750 2500 5375 0 0 0 0 0 1000 3500 0 0 0 0 0 0 5000 0 0 0 0 0 0 0*/

總結

以上是生活随笔為你收集整理的动态规划基本思想的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。