logo资料库

矩阵连乘(动态规划).doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
矩阵连乘(动态规划) 1. 问题描述 给定 n 个矩阵{A1,A2,…,An},其中 Ai 与 Ai+1 是可乘的,i=1,2 ,…,n-1。如何确定计算矩 阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 2. 2.1 问题分析 将矩阵连乘积简记为 A[i:j] ,这里 i≤j 考察计算 A[i:j]的最优计算次序。设这个计算次序在矩阵 Ak 和 Ak+1 之间将矩阵链断开, i≤k
m[i][j]=0; s[i][j]=0; } printf("矩阵的下标为:\n"); for(i=0;i<7;i++) scanf("%d",&p[i]); matrixChain(p,m,s); printf("The best sequence:\n"); for(i=1;i<=6;i++) { for(j=1;j<=6;j++) printf("%8d",m[i][j]); printf("\n"); } printf("\n"); for(i=1;i<=6;i++) { for(j=1;j<=6;j++) printf("%8d",s[i][j]); printf("\n"); { } { } void matrixChain(int p[7], int m[7][7], int s[7][7]) int n=6,i,j,r,k,t; for ( i = 1; i <= n; i++) m[i][i] = 0; for ( r = 2; r <= n; r++) for ( i = 1; i <= n - r+1; i++) { j=i+r-1; m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j]; s[i][j] = i; for ( k = i+1; k < j; 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;}
} } } 4. 运行结果 5. 心得体会 代码实现时要注意的问题:计算问题!! 因为你要保证在计算 m[i][j]查找 m[i][k]和 m[k+1][j]的时候,m[i][k]和 m[k+1][j] 已经计算出来了。
分享到:
收藏