




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、動態(tài)規(guī)劃法解矩陣連乘問題實驗內(nèi)容給定n個矩陣A1,A2,.An,其中Ai與Ai+1是可乘的,i=1,2,3。,n-1。我們要計算這n個矩陣的連乘積。由于矩陣乘法滿足結(jié)合性,故計算矩陣連乘積可以有許多不同的計算次序。這種計算次序可以用加括號的方式確定。若一個矩陣連乘積的計算次序完全確定,也就是說該連乘積已完全加括號,則我們可依此次序反復調(diào)用2個矩陣相乘的標準算法計算出矩陣連乘積。解題思路將矩陣連乘積A(i)A(i+1)A(j)簡記為Ai:j,這里 i <= j。考察計算Ai:j的最優(yōu)計算次序。設這個計算次序在矩陣A(k)和A(k+1)之間將矩陣鏈斷開,i <= k < j, 則
2、其相應完全加括號方式為(A(i)A(i+1)A(k) * (A(k+1)A(k+2)A(j)。特征:計算Ai:j的最優(yōu)次序所包含的計算矩陣子鏈 Ai:k和Ak+1:j的次序也是最優(yōu)的。矩陣連乘計算次序問題的最優(yōu)解包含著其子問題的最優(yōu)解。設計算Ai:j,1 <= i <= j <= n,所需要的最少數(shù)乘次數(shù)mi,j,則原問題的最優(yōu)值為m1,n 當i = j時,Ai:j=Ai,因此,mi,i = 0,i = 1,2,n當i < j時,mi,j = mi,k + mk+1,j + p(i-1)p(k)p(j)這里A(i)的維數(shù)為p(i-1)*(i)(注:p(i-1)為矩陣A(
3、i)的行數(shù),p(i)為矩陣Ai的列數(shù))實驗實驗代碼#include <iostream>#include <vector>using namespace std ;class matrix_chainpublic: matrix_chain(const vector<int> & c) cols = c ; count = cols.size () ; mc.resize (count) ; s.resize (count) ; for (int i = 0; i < count; +i) mci.resize (count) ; si.res
4、ize (count) ; for (i = 0; i < count; +i) for (int j = 0; j < count; +j) mcij = 0 ; sij = 0 ; 1 / 5 / 記錄每次子問題的結(jié)果 void lookup_chain () _lookup_chain (1, count - 1) ; min_count = mc1count - 1 ; cout << "min_multi_count = "<< min_count << endl ; / 輸出最優(yōu)計算次序 _trackback (1
5、, count - 1) ; / 使用普通方法進行計算 void calculate () int n = count - 1; / 矩陣的個數(shù) / r 表示每次寬度 / i,j表示從從矩陣i到矩陣j / k 表示切割位置 for (int r = 2; r <= n; + r) for (int i = 1; i <= n - r + 1; + i) int j = i + r - 1 ; / 從矩陣i到矩陣j連乘,從i的位置切割,前半部分為0 mcij = mci+1j + colsi-1 * colsi * colsj ; sij = i ; for (int k = i +
6、 1; k < j; + k) int temp = mcik + mck + 1j + colsi-1 * colsk * colsj ; if (temp < mcij) mcij = temp ; sij = k ; / for k / for i / for r min_count = mc1n ; cout << "min_multi_count = "<< min_count << endl ; / 輸出最優(yōu)計算次序 _trackback (1, n) ; private: int _lookup_chain (i
7、nt i, int j) / 該最優(yōu)解已求出,直接返回 if (mcij > 0) return mcij ; if (i = j) return 0 ; / 不需要計算,直接返回 / 下面兩行計算從i到j按照順序計算的情況 int u = _lookup_chain (i, i) + _lookup_chain (i + 1, j) + colsi-1 * colsi * colsj ; sij = i ; for (int k = i + 1; k < j; + k) int temp = _lookup_chain(i, k) + _lookup_chain(k + 1, j
8、) + colsi - 1 * colsk * colsj ; if (temp < u) u = temp ; sij = k ; mcij = u ; return u ; void _trackback (int i, int j) if (i = j) return ; _trackback (i, sij) ; _trackback (sij + 1, j) ; cout <<i << "," << sij << " " << sij + 1 << ",&q
9、uot; << j << endl; private: vector<int> cols ; / 列數(shù) int count ; / 矩陣個數(shù) + 1 vector<vector<int> > mc; / 從第i個矩陣乘到第j個矩陣最小數(shù)乘次數(shù) vector<vector<int> > s; / 最小數(shù)乘的切分位置 int min_count ; / 最小數(shù)乘次數(shù) ;int main() / 初始化 const int MATRIX_COUNT = 6 ; vector<int> c(MATRIX_COUNT + 1) ; c0 = 30 ; c1 = 35 ; c2 = 15 ; c3 = 5 ; c4 = 10 ; c5 = 20 ; c6 = 25 ; matrix_chain mc (c) ; / mc.calculate () ; mc.lookup_chain () ; return 0 ;實驗結(jié)果實驗驗證連乘矩陣假如為:計算過程為:從m可知最小連乘次數(shù)為m16 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃制品的節(jié)能照明設計考核試卷
- 2024項目管理考試的深入研究試題及答案
- 多功能復合材料考核試卷
- 電子專業(yè)音頻設備市場動態(tài)考核試卷
- 腸道微生物群落分析的意義試題及答案
- 2025年內(nèi)部審計審查試題及答案
- 2024年微生物未來發(fā)展預測試題及答案
- 拍賣行業(yè)監(jiān)管政策動態(tài)監(jiān)測考核試卷
- 細菌生理特性的檢驗方法試題及答案
- 定制白鋼屏風施工方案
- 公司收款委托書模板
- 宏觀經(jīng)濟學全套課件(完整)
- JT-T-808-2019道路運輸車輛衛(wèi)星定位系統(tǒng)終端通信協(xié)議及數(shù)據(jù)格式
- 鍺γ射線譜儀校準規(guī)范
- 七年級下冊數(shù)學平行線中拐點問題
- 計算機基礎知識題庫1000道含完整答案(歷年真題)
- 河北省唐山市豐潤區(qū)2023-2024學年部編版八年級下學期5月期中歷史試題
- 走進歌劇世界智慧樹知到期末考試答案2024年
- 20G520-1-2鋼吊車梁(6m-9m)2020年合訂本
- 城市綜合安全風險監(jiān)測預警平臺解決方案( PPT)
- (高清版)TDT 1036-2013 土地復墾質(zhì)量控制標準
評論
0/150
提交評論