矩阵相乘最优计算次序和最少计算次数代码c++代码
时间: 2023-05-30 13:06:59 浏览: 120
矩阵相乘代码C++实现
以下是矩阵相乘的最优计算次序和最少计算次数的代码实现,使用动态规划算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define INF 0x3f3f3f3f
void matrix_chain_order(int p[], int n, int m[][n+1], int s[][n+1])
{
int i, j, k, q;
for (i = 1; i <= n; i++) {
m[i][i] = 0;
}
for (k = 2; k <= n; k++) {
for (i = 1; i <= n-k+1; i++) {
j = i + k - 1;
m[i][j] = INF;
for (q = i; q <= j-1; q++) {
int temp = m[i][q] + m[q+1][j] + p[i-1]*p[q]*p[j];
if (temp < m[i][j]) {
m[i][j] = temp;
s[i][j] = q;
}
}
}
}
}
void print_optimal_parens(int s[][6], int i, int j)
{
if (i == j) {
printf("A%d", i);
} else {
printf("(");
print_optimal_parens(s, i, s[i][j]);
print_optimal_parens(s, s[i][j]+1, j);
printf(")");
}
}
int main()
{
int p[] = {30, 35, 15, 5, 10, 20, 25};
int n = sizeof(p) / sizeof(p[0]) - 1;
int m[n+1][n+1], s[n+1][n+1];
matrix_chain_order(p, n, m, s);
printf("最少计算次数:%d\n", m[1][n]);
printf("最优计算次序:");
print_optimal_parens(s, 1, n);
printf("\n");
return 0;
}
```
其中,`p`数组表示矩阵的维度,`n`表示矩阵的个数。
结果输出最少计算次数和最优计算次序。
阅读全文