1. source codes
#include <iostream> using namespace std; void matrixChainOrder(int p[], int n) { int *m = new int[n * n]; int *s = new int[n * n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { m[i * n + j] = 0; s[i * n + j] = 0; } } for (int l = 2; l <= n; l++) { for (int i = 1; i <= n - l + 1; i++) { int j = i + l - 1; m[i * n + j] = numeric_limits<int>::max(); for (int k = i; k <= j - 1; k++) { int q = m[i * n + k] + m[(k + 1) * n + j]+ p[i - 1] * p[k]*p[j]; if (q < m[i * n + j]) { m[i * n + j] = q; s[i * n + j] = k; } } } } cout << "the m matrix is "<< endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << m[i * n + j]<< " "; } cout << endl; } // cout << endl; // cout << "the s matrix is "<< endl; // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // cout << s[i * n + j]<< " "; // } // cout << endl; // } } int main() { int p[] = { 30, 35, 15, 5, 10, 20, 25 }; int n = sizeof(p)/ sizeof(int); matrixChainOrder(p, n); }
2. test result
the m matrix is 0 0 0 0 0 0 0 0 0 15750 7875 9375 11875 15125 0 0 0 2625 4375 7125 10500 0 0 0 0 750 2500 5375 0 0 0 0 0 1000 3500 0 0 0 0 0 0 5000 0 0 0 0 0 0 0
本文介绍了一种通过动态规划算法解决矩阵链乘法问题的方法,实现了矩阵相乘次序的优化,以减少不必要的计算开销。文章提供了一个C++实现示例,并展示了具体的测试结果。
849

被折叠的 条评论
为什么被折叠?



