矩阵最优链乘及Java实现
给一系列矩阵\(A_1,A_2,...A_n\)进行链乘,找出最优运算顺序
矩阵乘法
\(\begin{bmatrix}
{a_1,a_2}\\
{a_3,a_4}\\\end{bmatrix}*\begin{bmatrix}
{b_1,b_2}\\
{b_3,b_4}\\\end{bmatrix}=\begin{bmatrix}
{a_1*b_1+a_2*b_3,a_1*b_2+a_2*b_4}\\
{a_3*b_1+a_4*b_3,a_3*b_2+a_4*b_4}\\\end{bmatrix}\)
一个p行q列的矩阵乘以一个q行r列的矩阵最终得到一个p行r列的矩阵
新矩阵中第i行第j列的数字等于第一个矩阵的第i行数字和第二个矩阵第j列数字一一对应乘积的和
由此可以看出两矩阵相乘总共标量乘法运算数为pqr,这就是衡量的标准
矩阵乘法满足结合律
\((AB)C=A(BC)\)
运算顺序不同带来的差异
假设有三个矩阵A,B,C相乘
矩阵
A
B
C
维度
10*2
2*10
10*2
(AB)C代价
\(Cost(AB)=10*2*10\)
\(Cost((AB)C)=10*2*10+10*10*2=400\)
A(BC)代价
\(Cost(BC)=2*10*2\)
\(Cost(A(BC)=10*2*2+2*10*2=80\)
解决思路
最优方案的子方案也是最优方案
当一个链乘