-
问题
矩阵链乘法,特别要求举例时采用不同于讲义的数据进行推导。 -
解析
-
设计
void MatrixChain(int p[100], int m[100][100], int s[100][100], int n) {
int r, i, j, k, t;
for (r = 2; r <= n; r++) {//r为当前问题规模(长度)
for (i = 1; i <= n - r + 1; i++) { //i的起点不断变化,各种r长
j = i + r - 1; //不同终点
m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j];//划分为Ai(Ai+1...Aj),此时k=i
s[i][j] = i;//初始化 s位置为i
for (k = i + 1; k <= j - 1; k++) {
t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (t < m[i][j]) {
m[i][j] = t;
s[i][j] = k;
}
}
}
}
}
- 分析
算法复杂度: O(n³); - 源码