如2019年上半年软考第65题
第64题:已知矩阵Am*n和Bn*p相乘的时间复杂度为O(mnp)。矩阵相乘满足结合律,如三
个矩阵A、B、C相乘的顺序可以是(A*B)*C也可以是A*(B*C)。不同的相乘顺序所需进行的乘
法次数可能有很大的差别。因此确定n个矩阵相乘的最优计算顺序是一个非常重要的问题。已
知确定n个矩阵A 1 A 2 ......A n 相乘的计算顺序具有最优子结构,即A 1 A 2 ......A n 的最优计算顺序包
含其子问题A 1 A 2 ......A k 和A k+1 A k+2 ......A n (1≤k<n)的最优计算顺序。
可以列出其递归式为:
其中,A i 的维度为p i-1 *p i ,m[i,j]表示A i A i+1 ......A j 最优计算顺序的相乘次数。
先采用自底向上的方法求n个矩阵相乘的最优计算顺序。则求解该问题的算法设计策略为(
)。算法的时间复杂度为( ),空间复杂度为( )。
给定一个实例,(p 0 p 1 ......p 5 )=(20,15,4,10,20,25),最优计算顺序为( )。
又如2016年下半年第65题
第65题:两个矩阵A m*n 和B n*p 相乘,用基本的方法进行,则需要的乘法次数为m*n*p。多个矩阵
相乘满足结合律,不同的乘法顺序所需要的乘法次数不同。考虑采用动态规划方法确定M i ,
M (i+1) ,...,Mj多个矩阵连乘的最优顺序,即所需要的乘法次数最少。最少乘法次数用m[i,j]表
示,其递归式定义为:
其中i、j和k为矩阵下标,矩阵序列中Mi的维度为(pi-1)*pi采用自底向上的方法实现该算法来确
定n个矩阵相乘的顺序,其时间复杂度为(64)。若四个矩阵M1、 M2、M3、M4相乘的维度序
列为2、6、3、10、3,采用上述算法求解,则乘法次数为(65)
矩阵乘法的实质:
先看一个例子:
如何得出的呢?过程如下: 2*1+1*1=3 2*2+1*0=4
4*1+3*1=7 4*2+3*0=8即第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
如何理解呢?参见:https://nolaymanleftbehind.wordpress.com/2011/07/10/linear-algebra-what-matrices-actually-are/
只列出关键的部分:
矩阵最基本的应用是求解线性方程组。如
可以用矩阵重写为:
矩阵的应用远远超出了这个简单的问题,但是现在我们将以此为动机。让我们回到了解什么是矩阵。要了解矩阵,我们必须知道向量是什么。
真正的向量空间基本上就是您想到的空间。数字线是一维实向量空间,xy平面是二维实向量空间,三维是3维实向量空间,依此类推。如果您在学校里学习过向量,那么您可能会熟悉将其视为箭头,可以将它们加在一起,乘以实数等等,但是将向量相乘的工作原理有所不同。这听起来很熟悉吗?这应该。矩阵就是这样工作的,这不是巧合。
来源:https://blog.csdn.net/guangod/article/details/102754790