矩阵连乘问题 :给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
c++实现:
#include<iostream>
using namespace std;
int matrixMul(int i, int j, int p[]) {
int **array;//array[i][j]
array = new int*[j + 1];
for (int k1 = 0; k1 < j + 1; k1++) {
array[k1] = new int[j + 1];
for (int k2 = 0; k2 < j + 1; k2++)
array[k1][k2] = 0;
}
for (int f = 1; f < j + 1; f++) {
for (int k1 = i, k2 = f; k1 < j + 1 && k2 < j + 1; k1++, k2++) {
int min = 100000000;
if (k1 == k2)
break;
for (int k = k1; k < k2; k++) {
int temp = array[k1][k] + array[k + 1][k2] + p[k1 - 1] * p[k] * p[k2];
if (temp < min)
min = temp;
}
array[k1][k2] = min;
}
}
return array[i][j];
}
int main() {
int p[] = { 50, 10, 40, 30, 5 };
int result = matrixMul(1, 4, p);
cout << result << endl;
return 0;
}
结果: