动态规划 矩阵连乘问题 C语言版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}}}
/*计算最优值*/
构造最优解
void Traceback (int i, int j, int **s) { if (i==j) return; Taceback(i,s[i][j],s); Traceback(i,s[i][j],s); printf("%d","%d",&i,&s[i][j]); printf("%d","%d",&j,&s[i][j]+1);
计算最优值
void MatrixChain(int *p,int n,int **m,int **s) {int i,j,r; 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[i]; if (t<m[i][j]) {m[i][j]=t;s[i][j]=k;}
}ห้องสมุดไป่ตู้
动态规划
矩阵连乘问题
计算矩阵乘积的标准算法
void matrixMultiply(int **a,int **b,int **c,int ra,int ca, int rb, int cb) /*计算两矩阵乘积的标准算法 */ {int i,j,k,sum; if(ca!=rb) printf(“矩阵不可乘”); 判断A的列数与B的行数是否相等 for (i=0;i<ra;i++) /* ra是A的行数,cb是B的列数*/ for (j=0;j<cb;j++)/*cb是B的列数*/ { sum=a[i][0]*b[0][j]; 求和 for (k=1;k<ca;k++) sum + =a[i][k]*b[k][j]; c[i][j]=sum; }}
/*计算最优值*/
构造最优解
void Traceback (int i, int j, int **s) { if (i==j) return; Taceback(i,s[i][j],s); Traceback(i,s[i][j],s); printf("%d","%d",&i,&s[i][j]); printf("%d","%d",&j,&s[i][j]+1);
计算最优值
void MatrixChain(int *p,int n,int **m,int **s) {int i,j,r; 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[i]; if (t<m[i][j]) {m[i][j]=t;s[i][j]=k;}
}ห้องสมุดไป่ตู้
动态规划
矩阵连乘问题
计算矩阵乘积的标准算法
void matrixMultiply(int **a,int **b,int **c,int ra,int ca, int rb, int cb) /*计算两矩阵乘积的标准算法 */ {int i,j,k,sum; if(ca!=rb) printf(“矩阵不可乘”); 判断A的列数与B的行数是否相等 for (i=0;i<ra;i++) /* ra是A的行数,cb是B的列数*/ for (j=0;j<cb;j++)/*cb是B的列数*/ { sum=a[i][0]*b[0][j]; 求和 for (k=1;k<ca;k++) sum + =a[i][k]*b[k][j]; c[i][j]=sum; }}