动态规划 的方法求矩阵乘法的最少计算加括号方式
2013-05-06 16:12
344 查看
代码:
运行结果:
#include<iostream> #include<stdio.h> using namespace std; void init(int ***,int ***,int **,int); void destroy(int ***,int ***,int **,int); void MatrixChain(int ***,int ***,int *,int); void TraceBack(int **s,int,int); int main(void) { int ** m = NULL; int ** s = NULL; int *p = NULL; int n = 0; cout<<"请输入矩阵的个数:"<<endl; cin>>n; //初始化 init(&m,&s,&p,n); MatrixChain(&m,&s,p,n); printf("\n\nmatrix m's information:\n"); for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) printf("%6d ",m[i][j]); printf("\n"); } printf("\n\nmatrix s's information:\n"); for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) printf("%2d ",s[i][j]); printf("\n"); } //构造最优解 TraceBack(s,0,n-1); //释放资源 destroy(&m,&s,&p,n); return 0; } //分配资源(初始化) void init(int ***m,int ***s,int **p,int n) { //数组初始化 (*p) = new int[n+1]; (*m) = new int* ; (*s) = new int* ; for(int i = 0;i < n;i++) (*m)[i] = new int ; for(int i = 0;i < n;i++) (*s)[i] = new int ; //3õꌻˉ for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) { (*m)[i][j] = 0; (*s)[i][j] = 0; } } cout<<"请输入维度信息:"<<endl; for(int i = 0;i <= n;i++) { cin>>(*p)[i]; } } //构造最优解 void MatrixChain(int ***m,int ***s,int *p,int n) { //纵横轴的调试 for(int i = 1;i < n;i++) { for(int j = 0;j < n-i;j++) { int k = i+j; (*m)[j][k] = (*m)[j+1][k]+p[j]*p[j+1]*p[k+1]; (*s)[j][k] = j; for(int q = j+1;q < k;q++) { int t = (*m)[j][q]+(*m)[q+1][k] + p[j]*p[q+1]*p[k+1]; if(t < (*m)[j][k]) { (*m)[j][k] = t; (*s)[j][k] = q; } } } } } //释放资源 void destroy(int ***m,int ***s,int **p,int n) { delete [] (*p); (*p) = NULL; for(int i = 0;i < n;i++) { delete [] (*s)[i]; delete [] (*m)[i]; (*s)[i] = NULL; (*m)[i] = NULL; } delete [] (*s); delete [] (*m); (*s) = NULL; (*m) = NULL; } //构造最优解 void TraceBack(int ** s,int i,int j) { if(i == j) return ; TraceBack(s,i,s[i][j]); TraceBack(s,s[i][j]+1,j); cout<<"Multi A "<<i<<","<<s[i][j]; cout<<" and A "<<(s[i][j]+1)<<","<<j<<endl; }
运行结果:
相关文章推荐
- 从矩阵乘法的不同计算方式来看局部性原理
- calc 计算 题解(矩阵乘法优化动态规划)
- cublas中执行矩阵乘法运算的函数 首先要注意的是cublas使用的是以列为主的存储方式,和c/c++中的以行为主的方式是不一样的。处理方法可参考下面的注释代码
- 操作系统实验——串行、多线程和线程池三种方式计算矩阵乘法
- 用多线程并发的方式来计算两个矩阵的乘法
- 2015-8-18数据结构-动态规划-矩阵乘法次数最少
- 数据结构——矩阵压缩与压缩矩阵的转置与乘法计算
- 计算矩阵乘法函数步总数的公式
- 计算矩阵乘法所需运算的次数
- CUDA之矩阵乘法——非方阵计算
- 手把手教你用Execel计算两个矩阵的乘法
- 矩阵乘法计算脚本代码(C#)
- Python实现矩阵加法和乘法的方法分析
- 【华为OJ】【098-矩阵乘法计算量估算】
- 购房房贷按揭利息计算方法个人房贷按揭还款3方式
- 【BZOJ2553】【BeiJing2011】禁忌 AC自动机 矩阵乘法 动态规划
- C语言科学计算入门之矩阵乘法的相关计算
- 计算方法:矩阵三角分解法解线性方程组
- 矩阵乘法的四种理解方式
- BZOJ 2004|HNOI 2010 Day 1|公交线路|状态压缩动态规划|矩阵乘法