「算法笔记」矩阵乘法

一、矩阵定义

在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。一个 n×m 的矩阵一般这样表示:

所谓方阵,就是一个 n×n 的矩阵,也称作 n 阶矩阵。由于行数和列数相等,所以方阵的幂是有意义的。

方阵的幂是指,A 是一个方阵,将 A 连乘 n 次,即:C=An。若不是方阵则无法进行乘幂运算。

二、矩阵的乘法运算

设 A,B 是两个矩阵,令 C=A×B。

如果 A 是 n×p 的矩阵,B是 m×p 的矩阵,A 和 B 的乘积 C 是一个 n×m 的矩阵。

$C_{i,j}=A_{i,1} \times B_{1,j} + A_{i,2} \times B_{2,j} + A_{i,3} \times B_{3,j} + \cdots +A_{i,p} \times B_{p,j} = \sum_{k=1}^p A_{i,k} \times B_{k,j}$

即乘积 C 的第 i 行第 j 列的元素 Ci,j 等于矩阵 A 的第 i 行的元素与矩阵 B 的第 j 列对应元素乘积之和。

$\begin{bmatrix}1&4\\2&5\\3&6\end{bmatrix} \times \begin{bmatrix}1&2&3\\4&5&6\end{bmatrix}=\begin{bmatrix}1 \times 1+4\times4&1\times2+4\times5&1\times3+4\times6\\2\times1+5\times4&2\times2+5\times5&2\times3+5\times6\\3\times1+6\times4&3\times2+6\times5&3\times4+6\times6\end{bmatrix}=\begin{bmatrix}17&22&27\\22&29&36\\27&36&45\end{bmatrix}$

 三、矩阵乘法结合律

矩阵乘法不满足交换律,但是满足结合律。
$A×B×C=D$,设 $A×B=T$,则

$D_{i,j}=\sum_{x=1}^qT_{i,x}\times C_{x,j}$

$D_{i,j}=\sum_{x=1}^q(\sum_{y=1}^pA_{i,y}\times B_{y,x})\times C_{x,j}$

$D_{i,j}=\sum_{x=1}^q\sum_{y=1}^pA_{i,y}\times B_{y,x}\times C_{x,j}$

$A×(B×C)=E$,同理可得,

$E_{i,j}=\sum_{x=1}^p \sum_{y=1}^q A_{i,x} \times B_{x,y} \times C_{y,j}$

$D=E$

 四、矩乘优化线性递推

「POJ 3070」斐波那契数列第n项

在斐波那契数列中,F0=1,F1=1,Fn=Fn-1+Fn-2(n>1)。现给定整数 n,m(0≤n≤2*109,m=10000),求 Fn mod m

假设有一个 1×2 的矩阵 $\begin{bmatrix}F_{n-1}&F_n\end{bmatrix}$

$\begin{bmatrix}F_{n-1}&F_n\end{bmatrix} \times \begin{bmatrix}0&1\\1&1 \end{bmatrix}=\begin{bmatrix}F_n&F_{n-1}+F_n\end{bmatrix}=\begin{bmatrix}F_n&F_{n+1 }\end{bmatrix}$

我们记 $\begin{bmatrix}F_0&F_1\end{bmatrix}$ 为 A,转移矩阵 $\begin{bmatrix}0&1\\1&1 \end{bmatrix}$ 为 B,$\begin{bmatrix}F_{n-1}&F_n\end{bmatrix}$ 为 C。则 C=A×Bn-1
由于矩阵乘法满足结合律,所以我们可以通过与整数快速幂相同的方法在 O(log n) 的时间内求出 Bn-1

「Luogu P5110」块速递推

(持续更新中……)

猜你喜欢

转载自www.cnblogs.com/maoyiting/p/12754872.html
今日推荐