这类题目体现了DP的实质,也是经典问题。(•̀˓◞•́)
假设我们要用标准的矩阵乘法计算 M1 M 1 、 M2 M 2 、 M3 M 3 的乘积 M1M2M3 M 1 M 2 M 3 ,这三个矩阵的维数分别是2x10,10x2,2x10。
- 如果我们先把 M1 M 1 和 M2 M 2 相乘,然后把结果和 M3 M 3 相乘,即 ((M1M2)M3) ( ( M 1 M 2 ) M 3 ) 。那么要进行2x10x2+2x2x10=80次乘法;
- 如果我们先乘 M2 M 2 M3 M 3 ,结果再与 M1 M 1 相乘,即 (M1(M2M3)) ( M 1 ( M 2 M 3 ) ) 。那么数量乘法的次数就变成了:10x2x10+2x10x10=400。
可见,矩阵链相乘时的顺序不同,运算量也不同。而我们的目的是找到一种乘法顺序使得运算量最小。
递推关系式
我们注意到,对于矩阵链 M1M2...Mi M 1 M 2 . . . M i ,矩阵 Mi M i 的列数一定等于矩阵 Mi+1 M i + 1 的行数( 1≤i<n 1 ≤ i < n ),这是由矩阵乘法的定义决定的。
因此,对于一个矩阵链,我们指定每个矩阵的行数和最右面矩阵 Mn