一、找出最優解的性質,刻劃其結構特徵-最優子結構特徵
1. 矩陣連乘:將矩陣連乘積簡記為a[i:j] ,這裡i≤j,m[i
][j]為
計算矩陣a[i:j]所需的最少數乘次數
2. 最長公共子串行中的x(m)=和y(n)=,z[i][j]記錄字串x[i]、y[j]最長公共子串長度
3. 最大子段和:子問題: ,b[j]計算區間a[1:j]上最大子區間長度
4. 最優三角剖分:凸子多邊形,t[i][j]記錄凸多邊形的最優三角剖分所對應的權函式值
5. 多邊形遊戲:從頂點i(1≤i≤n)開始,長度為j(鏈中有j個頂點)的順時針鏈p(i,j),即v[i], op[i+1], …, v[i+j-1], m[i][j][0]存放自頂點i開始(首次刪除第i條邊),長度為j的子鏈長度的最小值,m[i][j][1]存放自頂點i開始(首次刪 除第i條邊),長度為j的子鏈長度的最大值
6.
影象壓縮:前i
個象素序列
,s[i]儲存為前i段灰度值所需最小儲存空間,
7. 揹包問題中的子問題,m[i][j]表示可選物品為i+1,i+2..n,揹包容量為j時,所裝物品的最大價值
8. 最優二叉搜尋樹:最優二叉搜尋樹tij,m[i][j]為子樹最小平均路長
二、遞迴地定義最優值:刻畫原問題解與子問題解間的(數值)關係:表示式中存在尋優變數、最優目標值
1. 矩陣連乘:
當i=j時,m[i][j]=0; 只有乙個矩陣,相乘次數為0
(m[1][n])當i
其中,k為區間[i,j)之間的斷點,矩陣ai的維數為p[i-1]*p[i]
2. 最長公共子串行: 當i=0或j=0時,z[i][j]=0; 其中乙個序列為空
(z[lenx][leny]) 當i,j>0 && x[i]==y[j],z[i][j]=z[i-1][j-1]+1
當i,j>0 && x[i]!=y[j], z[i][j]=max
3. 最大子段和: 當j=0,b[j]=0; 序列為空
(b[n]) 當j>0,b[j]=max
4. 最優三角剖分: 當i=j,t[i][j]=0; 此時三角形中只有兩個頂點,為退化三角形
(t[1][n]) 當i
k為區間[i, j)上的斷點,w(vi-1,vi,vj)為三角形的權值
5. 多邊形遊戲: 當j=1,m[i][j][0]=v[i],m[i][j][1]=v[i]; 長度為的子鏈
(max)當j>1,m[i][j][0]=min+11
bmax(i-k+1,i)為最後一段
[i-k+1]
畫素所佔位數
7. 揹包問題中的子問題,當i=n,如果w[n]>j,m[i][j]=0; 此時物品重量》揹包容量
(m[1][c]) 如果w[n]<=j, m[i][j]=v[n]; 此時物品重量<=揹包容量
此時揹包容量為j,只有乙個物品可選, w為物品重量, v為物品價值
當ij,m[i][j]=m[i-1][j];
如果w[n]<=j, m[i][j]=max;
8. 最優二叉搜尋樹:m[i][i-1]=0 1<=i<=n i>j
(m[1][n]) m[i][j]=w[i][j]+min i<=j
k為區間[i,j]上的斷點
a中存放在二叉樹中的葉節點找到x的概率(成功)
b中存放在內節點上找到x的概率(失敗)
t(i,j)為有序集關於訪問概率的一棵最優二叉樹
w[i][j]表示查詢落在區間(xi-1, xj+1)上的概率
w[i][j] = a[i-1] + b[i] +…+ b[j] + a[j]
三、以自底向上的方式計算出各個子問題、原問題的最優值, 並避免子問題的重複 計算(記錄已計算的子問題解)
這是動態規劃相對於遞迴與分治的好處,也可以採用備忘錄方法,形式上更加簡潔。
四、根據計算最優值時得到的資訊,構造最優解
主要是根據各個斷點,進行回溯,構造解的過程
我覺得,遇到乙個求最優問題,首先要將問題抽象出數學模型,用符號語言描述問題,然後找出此問題是否具有最優子結構,如果具有,再以遞迴的定義構造子問題的最優解,這一步最為關鍵,這不僅關係到問題是否能求解出,也關係到求解效率。然後自底向上構造最優解,當所有子問題的最優解求出來時,整個問題的最優解也就求出來了。個人感覺,還是數學的作用比較重要一些吧,在這些動態規劃的問題中,不乏一些優秀的優化案例,比如在最優二叉搜尋樹中,運用了動態規劃加速原理,這便是數學知識的運用。
藍橋杯刷題心得 動態規劃
這裡單獨寫一下動態規劃專題,藍橋杯當中一定會出一道動態規劃的題目所以稍微彙總一下。源於藍橋杯2020屆一道題目 1.某市市長獲得了若干批口罩,每一批口罩的數目如下 如果你把以下文字複製到文字檔案中,請務必檢查複製的內容是否與文件中的一致。在試題目錄下有乙個檔案 mask.txt,內容與下面的文字相同...
動態規劃部分心得體會
這幾天看動態規劃的題目,發現難點還是在於狀態轉移方程,真的想不出。或者說有的題目大體思路有了,狀態方程懂了,但是具體到 實現上又很難下手 就是那種只明白思路無法用 實現的感覺。看著同學們做了好多,自己卻不太會做,唉。或許是自己做過的題目和接觸到的題目太少了,又把課件從頭到尾看了一遍,一點一點的看,具...
規劃問題心得
規劃演算法是數學建模眾多演算法中最常用的演算法之一,也是最容易入門 學習的演算法之一,規劃的初學者可能發現,它和我們高中時學過的線 性規劃非常像,但又複雜許多。高中時學習的規劃形式非常簡單,只 有 x 和 y 兩個維度,一般都是利用影象進行求解,但實際生活中的維 度不僅僅是二維,也並非線性,利用高中...