矩阵乘法与其运用

矩阵乘法与其运用(logn递推)

规则:

1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。

\[\left( \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ \end{matrix} \right) * \begin{pmatrix} 1 & 2 \\ \end{pmatrix} \]

如上图所示,A的行数等于B的列数

2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

\[A=\begin{bmatrix} {a_{1,1}}&{a_{1,2}}&{a_{1,3}}\\ {a_{2,1}}&{a_{2,2}}&{a_{2,3}}\\ \end{bmatrix} \]

\[B=\begin{bmatrix} {b_{1,1}}\\ {b_{2,1}}\\ {b_{3,1}}\\ \end{bmatrix} \]

\[C=A*B= \begin{bmatrix} {a_{1,1}*b_{1,1}+a_{1,2}*b_{2,1}+a_{1,3}*b_{3,1}}\\ {a_{2,1}*b_{1,1}+a_{2,2}*b_{2,1}+a_{2,3}*b_{3,1}}\\ \end{bmatrix} \]

有了矩阵我们可以干嘛呢?

不可以能出门买菜还要用矩阵吧

本人学识浅薄,目前只了解一些应用,浅谈一下

在O(logn)时间复杂度推递推式

我们以最简单的递推式斐波那契为例子

\[f[i]=f[i-1]+f[i-2] \]

如果扩展一下

\[\begin{cases} \quad \text{f[i]=f[i-1]+f[i-2]} \\ \quad \text{f[i-1]=f[i-1]+0*f[i-2]}\\ \end{cases} \]

为什么要这样扩展呢?

这样可以适配矩阵乘法

\[\begin{bmatrix} {f[i-1]}\\ {f[i-2]}\\ \end{bmatrix} * \begin{bmatrix} {1}&{1}\\ {1}&{0}\\ \end{bmatrix} = \begin{bmatrix} {1*f[i-1]+1*f[i-2]}\\ {1*f[i-1]+0*f[i-2]}\\ \end{bmatrix} = \begin{bmatrix} {f[i]}\\ {f[i-1]}\\ \end{bmatrix} \]

这样就把递推变成矩阵乘法

为什么要这样变成矩阵呢,直接推不好吗,矩阵有什么好处呢?

我们可以很容易的发现之前是两个递推式中的数相加得到第3个

而矩阵中是递推矩阵中的一个乘上一个常量矩阵

在斐波那契中我们可以用下面的式子

\[\begin{bmatrix} {f[0]}\\ {f[1]}\\ \end{bmatrix} * \begin{bmatrix} {1}&{1}\\ {1}&{0}\\ \end{bmatrix}^n \]

快速算出f[n]与f[n+1]

如何快速算常数矩阵

\[ \begin{bmatrix} {1}&{1}\\ {1}&{0}\\ \end{bmatrix}^n \]

考虑快速幂O(logn)

完结撒花~~~~

posted @ 2023-01-08 22:18  He_Zi  阅读(92)  评论(1编辑  收藏  举报