/** * @brief MatrixChainMultiplication Algorithm 15.2 * @author An * @data 2013.8.25 **/ #include <iostream> #include <limits> #define N 6 using namespace std; static int **m = new int*[N]; static int **s = new int*[N]; // static int *p = new int[N]; void MatrixChainOrder( int *p ) { for ( int i = 0; i != N; ++i ) { m[i] = new int[N]; s[i] = new int[N]; } for ( int i = 0; i != N; ++i ) { for ( int j = 0; j != N; ++j ) { m[i][j] = 0; s[i][j] = 0; } } for ( int i = 0; i != N; ++i ) { m[i][i] = 0; } for ( int l = 2; l <= N; ++l ) { for ( int i = 0; i != N - l + 1; ++i ) { int j = i + l - 1; m[i][j] = INT_MAX; for ( int k = i; k != j; ++k ) { int q = m[i][k] + m[k + 1][j] + p[i] * p[k + 1] * p[j + 1]; // p+1 if ( q < m[i][j] ) { m[i][j] = q; s[i][j] = k; } } } } } void PrintOptimalParens( int **ss, int i, int j ) { if ( i == j ) { cout << "A" << i + 1; } else { cout << "("; PrintOptimalParens( ss, i, s[i][j] ); PrintOptimalParens( ss, s[i][j] + 1, j ); cout << ")"; } } void PrintMatrix( int **Ma, int length ) { for ( int i = 0; i != length; ++i ) { for ( int j = 0; j != length; ++j ) { cout << Ma[i][j] << " "; } cout << endl; } cout << endl; } int main() { int *p = new int[N + 1]; int a[] = { 30, 35, 15, 5, 10, 20, 25 }; for ( int i = 0; i != N + 1; ++i ) { p[i] = a[i]; } MatrixChainOrder( p ); PrintOptimalParens( s, 0, N - 1); cout << endl; PrintMatrix( m, N ); PrintMatrix( s, N ); return 0; }
动态规划——矩阵链相乘
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
矩阵链相乘实例
矩阵链相乘 又见到矩阵链了(莫名想起线性代数老师)
数据 解决方案 i++ 最优解 矩阵乘法 -
矩阵链相乘助教版代码
矩阵链相乘 经典动态规划题( 好像遍地都是经典题目 )
算法solution 最优解 矩阵连乘 递归 i++ -
动态规划(三)--矩阵链乘法
问题描述:给定n个矩阵的链,矩阵Ai的规模为Pi-1XPi。求完全括标量乘法,若按(A1(A2A3))次序计算,需
i++ 标量 最优解 java代码 java