矩陣連乘簡介詳細例子以及解析**測試結果
給定n個矩陣,其中,ai與ai+1是可乘的,i=1,2,….n-1。
由於矩陣乘法滿足結合律,故計算矩陣的連乘積可以有不同的計算次序。
矩陣a和b可乘的條件是矩陣a的列數等於矩陣b的行數。
若a是乙個p×q矩陣,b是乙個q×r矩陣,則其乘積c=ab是乙個p×r矩陣。在上述計算c的標準演算法中,主要計算量在3重迴圈,總共需要p×q×r次數乘。
兩個矩陣相乘計算:
下面舉具體例子:
首先定義乙個陣列a[max][max]用來儲存乙個矩陣的數值。
再定義乙個陣列b[max][max]用來儲存另乙個矩陣的數值。
最後再定義乙個陣列c[max][max]用來儲存兩個矩陣相乘的結果。
前面提到這個**需要三重迴圈:
第一重是矩陣相乘中的a的資料,因為a陣列是一行一行與b陣列相乘的,所以判斷條件是a的行數
第二重是矩陣相乘中的b的資料,因為b陣列是一列一列與a陣列相乘的,所以判斷條件是b的列數
第三重是根據列出的資料得出的規律,由上圖可以看出結果是由兩部分相加得到的。因此可一在第三重迴圈前解決前一部分的問題,在第三重迴圈裡面解決第二部分的問題。
#include
#include
#define max 100
void matrixmultiply(int a[max], int b[max], int c[max], int ra, int ca, int rb, int cb)
for (i = 0; i < ra; i++) //a是一行一行與b相乘的
//這行**解決的是後一部分a的列數大於0的,b的行數大於0的
c[i][j] = sum;}}
}int main(void)
}puts("請輸入矩陣b的具體資料;");
for (i = 0; i < rb; i++)
}matrixmultiply(a, b, c, ra, ca, rb, cb);
printf("矩陣相乘的結果:\n");
動態規劃之矩陣連乘問題
在動態規劃演算法中,區域性最優並不一定會使得全域性最優,它在每乙個階段的決策都會影響到後面的決策。所以我們在將問題劃分為若干階段時,需要將各個階段所發生的不同狀態儲存起來,提供後一階段做決策。一般都是子問題重疊的時候使用動態規劃。下面是乙個矩陣連乘的問題。問題 n個矩陣連乘問題 描述 矩陣連乘滿足結...
動態規劃之矩陣連乘問題
矩陣連乘問題是通過給矩陣連乘時加括號,使得總的計算量最小。考慮3個矩陣相乘的例子,a1,a2,a3,假設這3個矩陣的維數分別為 10x100,100x50,5x50 若按照 a1a2 a3 方式計算,需要的數乘次數為10x100x5 10x5x50 7500 若按照 a1 a2a3 方式計算,需要的...
動態規劃之矩陣連乘問題
給定 n 個矩陣 其中 a i 與 a 是可乘的 i 1,2,ldots,n 1 矩陣 a i 的維數為 p p i,i 1,2,ldots,n 考察這 n 個矩陣的連乘積 a 1a 2 ldots a n 要求通過新增括號使得矩陣連乘時,數乘次數最少。例如連乘積 a 1a 2a 3a 4 可以有以...