矩陣連乘問題.
eg.a1 a2 a3 a4 a5 a6, 已知:各矩陣的維數:a1=30*35,a2=35*15,a3=15*5,a4=5*10,a5=10*20, 則 int p=;
a5=20*25 .隱含的條件是:兩矩陣必須是相鄰兩個才能乘.求六個矩陣求其加括號的位置,從而使得連乘的次數最少.
解:思想:矩陣連乘用動態規劃發求解的兩個原因:
1.矩陣連乘問題的最優解包含著其中子問題的最優解.
2.在計算最優值的過程中,許多子問題被重複計算.
用a[i,j]來表示[ai..aj]加括號的位置.則有a[1,1]表示的給乙個陣列加括號的位置,0,同理也有a[i,i]=0;
假設我們將a[i,i+1...k,k+1,..,j]中間k的位置加括號,則有乘法的次數為:
a[i,i+1,...k]的乘法次數 + a[k+1,...j]乘法次數 + a[i,i+1...]*a[k+1...j]的次數
1.首先陣列p=,下表從0開始,6結束.
2.用二維陣列m[i][j]表示最少乘法次數,s[i][j]表示當m[i][j]為最小時加括號的位置.
下面**
//用來得到最優解的m ,s;
void matrixchain(int p[6] ,int n, int m[7] ,int s[7])}}
}void trackback(int i ,int j, int s[7])
int main(); //p用來存放每乙個矩陣的行數
int s[7][7] = ;
int m[7][7] = ;
matrixchain(p,n,m,s);
trackback(1,n,s);
}
矩陣連乘問題 python實現
importnumpyasnp 求最優值 並記錄相關資訊 defmatrixchain p,n,m,s 單個矩陣連乘的次數 foriinrange n m i i 0 s i i 0 r 表示連乘的個數 從2開始 2 3 4 5 forrinrange 2,n 1 從第i個矩陣ai開始,長度為r,迴...
矩陣連乘問題
矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...
矩陣連乘問題
由於矩陣的乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這中計算次序 可以用加括號的方式來確定。例如,矩陣連乘積a1a2a3a4可以有5種不同的完全加括號方式 a1 a2 a3a4 a1 a2a3 a4 a1a2 a3a4 a1 a2a3 a4 a1a2 a3 a4 矩陣a和b可乘的條...