CLRS 15.2矩阵链乘法
来源:互联网 发布:如何把mac里的照片导出 编辑:程序博客网 时间:2024/06/07 19:14
15.2-1
m 表如下:
s 表如下:
因此结果为
附带本题代码
#include <iostream>#include <climits>using std::cout;using std::endl;void MATRIX_CHAIN_ORDER(int *p,int n,int **m,int **s){ for(int i = 0; i <= n; ++i) m[i][i] = 0; for(int l = 2; l <= n; ++l) //计算当前矩阵链长度时的最优解,比如当前长度是4,与n无关 { for(int i = 1; i <= n - l + 1; ++i) { int j = i + l - 1; m[i][j] = INT_MAX; for(int k = i; k <= j - 1; ++k) { int temp = m[i][k] + m[k+1][j] + p[i-1] * p[k] * p[j]; if(temp < m[i][j]) { m[i][j] = temp; s[i][j] = k; } } } }}void PRINT_OPTIMAL_PARENS(int **s,int i,int j){ if(i == j) cout << 'A' << i; else { cout << '('; PRINT_OPTIMAL_PARENS(s,i,s[i][j]); PRINT_OPTIMAL_PARENS(s,s[i][j]+1,j); cout << ')'; }}int main(){ int p[] = {5,10,3,12,5,50,6}; int n = 6; int **m = new int *[n+1]; int **s = new int *[n+1]; for(int i = 0; i < n + 1; ++i) { m[i] = new int[n+1]; s[i] = new int[n+1]; } MATRIX_CHAIN_ORDER(p,n,m,s); PRINT_OPTIMAL_PARENS(s,1,6); for(int i = 0; i < n + 1; ++i) { delete []m[i]; delete []s[i]; } delete []s; delete []m; return 0;}
15.2-2
MATRIX_CHAIN_MULTIPLY(A,s,i,j) if(i == j) return A[i] if(j == i+1) return A[i]*A[j]; else B1 = MATRIX_CHAIN_MULTIPLY(A,s,i,S[i,j]) B2 = MATRIX_CHAIN_MULTIPLY(A,s,S[i,j]+1,j) return B1*B2
15.2-3
假设
15.2-4
子问题图的顶点是有序对
边的数目:
所以顶点和边分别为
15.2-5
每次
15.2-6
数学归纳法:
当
当设
- CLRS 15.2矩阵链乘法
- CLRS 4.2矩阵乘法的Strasson算法
- 15.2 矩阵链乘法
- 算法导论15.2 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 矩阵链乘法
- 【DP】矩阵链乘法
- CLRS第十四章思考题
- MAC: cannot use typeid with -fno-rtti
- CLRS 15.1钢条切割
- bzoj 1059: [ZJOI2007]矩阵游戏|二分图匹配|匈牙利算法
- 纯c中char*[]的处理
- CLRS 15.2矩阵链乘法
- CLRS 15.3动态规划原理
- myeclipse中jquery.min.js引入到工程中显示红叉
- CLRS 15.4最长公共子序列
- 【bzoj2697】【特技飞行】【贪心】
- Struts2标签—Iterator标签
- 浅谈JSONP跨域请求
- How to enable virtualization on Thinkpad X1 Carbon with Win10 installed
- 【Java】接口和抽象类的区别