问题
设A1,A2,……An为n个矩阵的序列给定一个n个矩阵的序列,其中Ai为Pi=1*P阶矩阵,这个矩阵链的输入用向量P=<P0,P1,P2,…,Pn>给出,确定一种乘法次序,使得基本运算的总次数达到最小。
解析
- Ai…j:表示矩阵链相乘的子问题Ai,Ai+1…Aj; M[i…j]:表示得到乘积Ai…j所用的最少基本运算次数;
- 假定最后一次相乘发生在矩阵链Ai…kAk+1…j之间m[i,j]=min{m[i,k]+m[k+1,j]+Pi=1PkPj}满足优化原则。也就是说,m[i,j]最小值时,m[i,k],m[k+1,j]也是最小的。
设计
递归:
int recurMatrixChain(int* data,int i, int j) {
if (i == j) {
// 递归到最小单元
m[i][j] = 0;
s[i][j] = i;
return m[i][j];
}
m[i][j] = 1 << 30; //无穷大
s[i][j] = i;