1.問題
給定一定個矩陣序列,求出該矩陣序列的乘積所需計算的最少乘法次數。
2.解析
運用動態規劃的思想,將矩陣依次分割並記錄所需乘法次數,找出其中最小的被下一級使用。
例:矩陣序列:a1: 30 * 35
a2: 35 * 15
a3: 15 * 5
a4: 5 * 10
a5: 10 * 20
a6: 20 * 25
步驟:r=1(r表示一次計算r個矩陣) (由於矩陣自身做不了乘法,所以次數都是0)
arr[1][1]=0, arr[2][2]=0, arr[3][3]=0,
arr[4][4]=0, arr[5][5]=0, arr[6][6]=0
r=2arr[1][2]=30 * 35 * 15, arr[2][3]=35 * 15 * 5, arr[3][4]=15 * 5 * 10,
arr[4][5]=5 * 10 * 20, arr[5][6]=10 * 20 * 25
r=3arr[1][3]=min
arr[2][4]= min
arr[3][5]= min
arr[4][6]= min
r=4一次類推使用前一次計算出的結果,一次推出,直至r=6(即r等於矩陣個數)
3.設計
for r=
2 to n do
//r為當前問題規模(長度)
for i=
1 to n-r+1do
//i的起點不斷變化,各種r長
j=i+r-
1//不同終點
arr[i]
[j]= arr[i+1]
[j]+ pi*pk*pj //劃分為4(4.4)
s[i,j]
=i for k=i+
1 to j-1do
//不同的劃分位置
t= arr[i]
[k]+ arr[k+1]
[j]+pi*pk*pj
if t[j] then arr[j]
=t s[i]
[j]=k
4.分析
時間複雜度:o(n^3) (有三重迴圈)
演算法設計與分析作業(1)
1.dijkstra求單源最短路徑 先進行存圖操作,將帶權有向圖用鄰接矩陣來表示 for int i 0 i u v dist map u v dist 用dis陣列來儲存0點到其他每乙個點的最短距離,初始時dis i map 0 i 接下來進行鬆弛操作,找出最短距離 首先0點為q集合中的點,0 1...
演算法分析與設計 作業1
問題 舉乙個例項,畫出採用prim演算法構造最小生成樹的過程 1 首先選定頂點1加入最小生成樹集合 2 以頂點1作為最小生成樹集合,尋找到其餘頂點構成的未選集合中權值最小的一條邊,此處尋找到頂點2,並將頂點2加入集合。3 以頂點2 3作為最小生成樹集合,尋找至其餘頂點構成集合權值最小的邊,此處找到頂...
演算法分析與設計作業9
1.問題 最長公共子串行問題 給定序列x 和y 求x和y的最長公共序列。2.解析 對於字串 aceghi 和 bcdefgh lcs二維 3.設計 def lcs x,y m len x 1 n len y 1 if m 1 or n 1 print 存在空字串!return 1 lcs len n...