需要知道的知识:
两个矩阵A,B可以相乘的条件是,A矩阵的列数等于B矩阵的行数
矩阵A[x,y],B[y,z] ,A和B相乘后得到矩阵C[x,z],这其中需要计算的次数为x*y*z(仅仅计算加法的次数)
首先矩阵连乘的计算的顺序不同的话,那么计算的次数也不一定相同
比如:
A1:10*100 、A2:100*5、A3:5*50的三个矩阵的相乘
第一种划分:(A1*A2)*A3 计算次数为:10*100*5+10*5*50=7500
第二种划分:A1*(A2*A3) 计算次数为:100*5*50+10*100*50=75000
第二种划分方式需要计算的次数是第一种的10倍
矩阵的最小连乘问题:给出一个一维数组,计算由该数组构成的矩阵乘积的最小计算次数
第一种方法:找出所有的划分结果,然后取最小值(pass)
第二种方法:动态规划
假设n个矩阵的计算次数为f(n)
假设有n个矩阵需要进行计算,那么就需要对其进行划分,假如我们从第k(k<n)个矩阵进行第一次划分,也就是说将这n个矩阵划分(1~k),(k+1~n)
那么可以得到这个关系式:
f(1~n)=f(1~k)+f(k+1~n)+1.row*k.col*n.col
注:1.row表示第一个矩阵的行数 k.col表示第k个矩阵的列数
解释:1~n的计算次数等于1~k的计算次数加上k+1~n的计算次数,另外最后前两个的计算完毕之后会变成两个矩阵,这两个矩阵还要进