矩阵链乘法问题

来源:互联网 发布:苹果手机数据备份 编辑:程序博客网 时间:2024/05/16 04:37
//矩阵链乘法(动态规划)//假设三个矩阵(m*n n*a a*b)相乘,那么输入A为{m,n,a,b}int matrix_chain_order(int* A, int size){int num = size-1;if(num == 0)return 0;if(num == 1)return A[0]*A[1];int ** p = new int*[num];p[0] = new int [num*num];memset(p[0],0,sizeof(int)*num*num);for(int i=1; i<=num-1; i++)p[i] = p[i-1] + num;for(int length = 2; length<=num; length++){//从底向上计算子链for(int i = 1; i<=num-length+1; i++){int j = i + length - 1;                   p[i-1][j-1] = 0x7fffffff;//将k在i和j之间移动,取最小的乘法代价for(int k = i; k<=j-1; k++){//p[i-1][k-1]为Ai乘到Ak的代价//p[k][j-1]为Ak+1乘到Aj的代价//A[i-1]*A[k]*A[j]为将以上两者相乘的代价(Ai的行数乘Ak的列数乘Aj的列数)int c = p[i-1][k-1] + p[k][j-1] + A[i-1]*A[k]*A[j];if(c< p[i-1][j-1]) p[i-1][j-1] = c;}}}int result = p[0][num-1];//释放数组delete[] p[0];delete p;return result;}

0 0
原创粉丝点击