- 问题
- 有n个矩阵相乘(A1A2A3...An),任何一个矩阵 Ai 的维度为Pi-1 * Pi ; 求如何拆分矩阵相乘使得矩阵乘法次数最小
- 自顶向下的递归方法
- 对于任何一个子集Ai...Aj ; 如果i==j,则为一个矩阵,乘法次数m(i,j) 为零;
- 否则从各个索引位置k( i...j )拆分成前后两个子矩阵相乘次数,再加上 Pi-1*Pk*Pj的值;m(i,j) = min(m(i,k) + m(k+1,j) + Pi-1*Pk*Pj)
- 自底向上的动态规划
- 需要一个二维数组存储 :从下标1到n-相乘长度 +1,从矩阵相乘的长度1到n;的最小相乘次数;
- 如果矩阵长度为1,则m(i,i) = 0; 如果矩阵长度为2,则为 m(i,j) = m(i,i) + m(j,j) + Pi-1*Pi*Pj;如果矩阵长度为+2;则m(i,j) = m(i,k) + m(k+1,j) + Pi-1 * Pk *Pj
- 代码
- 结果