演算法分析與設計實踐 作業8 動態規劃之矩陣鏈乘法

2021-10-05 06:49:32 字數 672 閱讀 4456

設a1,a2,… ,an為n個矩陣的序列,其中ai為pi-1*pi階矩陣,這個矩陣鏈 的輸入用向量p=給出。

給定向量p,確定一種乘法次序,使得基本運算的總次數達到最小。

對於矩陣鏈乘法問題,我們將所有對於1≤i≤j≤n確定a i a i+1 …a j 的最小代價括號方案作為子問題。令m[i,j]表示計算矩陣a i,j 所需要的標量乘法的次數最小值,則最優解就是計算a i…n所需的最低代價就是m[1,n]

① 對於i=j的情況下,顯然有m=0,不需要做任何標量乘法運算。所以,對於所有的i=1、2…n,m[i,i] = 0.

② 當i < j的情況,就按照最優括號化方案的結構特徵進行計算m[i,j]。假設最優括號化方案的分割點在矩陣ak和ak+1之間,那麼m的值就是ai…k和ak+1…j的代價加上兩者量程的代價的最小值。

m只是給出了子問題最優解的代價,但是並未給出構造最優解的足夠資訊(即分割點的位置資訊)。所以,在此基礎之上,我們使用乙個二維陣列s[i,j]來儲存 a i a i+1 …a j 的分割點位置k。

for

(int l=

2;l<=n;l++)}

}}

時間複雜度:t(n)=o(n3)

演算法分析與設計作業8

1.問題 給定一定個矩陣序列,求出該矩陣序列的乘積所需計算的最少乘法次數。2.解析 運用動態規劃的思想,將矩陣依次分割並記錄所需乘法次數,找出其中最小的被下一級使用。例 矩陣序列 a1 30 35 a2 35 15 a3 15 5 a4 5 10 a5 10 20 a6 20 25 步驟 r 1 r...

演算法分析與設計實踐大作業

圓排列問題 給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的圓排列。首先,已知圓的個數n以及記錄各圓半徑的陣列r i i 1 n 記錄各圓圓心橫座標的陣列x i i 1 n。要記錄最短排列長度minlen,最終求出排列順序。要注意,只要大小合適,目標圓就有可能與排列...

演算法分析與設計實踐 作業三 檢索

一 問題描述 寫出兩種檢索演算法 在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 0.二 解析 1.順序查詢 遍歷資料元素 2.二分查詢 演算法原理 在查詢表中不斷取中間元素與查詢值進行比較,以二分之一的倍率進行表範圍的縮小。三 設計 void mi...