复习心得 - 矩阵

二维数组(?)

定义

一个 \(m\times n\) 个数构成一个矩阵 \(\text{A}\),或者 \(\text{A}_{\text{mn}}\)。

\[\text{A}=\begin{bmatrix} a_{11} & a_{12} & a_{13} & \dots & a_{1n}\\ a_{21} & a_{22} & a_{23} & \dots & a_{2n} \\ a_{31} & a_{32} & a_{33} & \dots & a_{3n} \\ \dots & \dots & \dots & \dots & \dots \\ a_{m1} & a_{m2} & a_{m3} & \dots & a_{mn} \end{bmatrix} \]

其中 \((a_{ij})\)(或 \((a_{ij})_{m\times n}\)) 是矩阵 \(\text{A}\) 的元素。

矩阵 +

就是直接加了。

注意 \(n\) 和 \(m\) 都要相等。

\[\text{A}_{32}=\begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix} \]

\[\text{B}_{32}=\begin{bmatrix} 1 & 9 & 1 \\ 9 & 8 & 1 \end{bmatrix} \]

这时

\[\text{A}+\text{B}=\begin{bmatrix} 1+1 & 1+9 & 4+1 \\ 5+9 & 1+8 & 4+1 \\ \end{bmatrix}=\begin{bmatrix} 2 & 10 & 5 \\ 14 & 9 & 5 \\ \end{bmatrix} \]

矩阵加法满足交换律和结合律。

矩阵 -

这个不举例了,就是逆运算了。

数乘 · 不是矩乘!

\[\text{A}_{32}=\begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix} \]

这时

\[v\cdot\text{A}_{32}=\begin{bmatrix} v & v & 4v \\ 5v & v & 4v \\ \end{bmatrix} \]

矩阵数乘满足交换律、结合律和分配律。

矩阵转置

对角线翻折,记作 \(A^T\)。

\[\text{A}=\begin{bmatrix} 1 & 1 & 4 \\ 5 & 1 & 4 \\ \end{bmatrix} \]

这时

\[\text{A}^T=\begin{bmatrix} 1 & 5 \\ 1 & 1 \\ 4 & 4 \\ \end{bmatrix} \]

我们发现相当于 \(A_{ij}\to{A^T}_{ji}\)。

矩阵转置满足反身性、可乘性。(点乘、矩乘)

矩乘 *

在这个例子中,\(\text{A}_{np}\) 和 \(\text{B}_{pm}\) 是我们的两个矩阵。

具体的来说,就是:

\[\text{C}_{ij}=\sum _{k=1}^p\text{A}_{ik}\cdot\text{B}_{kj} \]

这个建议手玩。

矩阵结果就是:

\[\text{A}_{np}\ \text{B}_{pm}=\text{C}_{nm} \]

注意:这样定义的矩乘不满足 \(\text{AB}=\text{BA}\)。

但是满足:

  • \((\text{AB})\text{C}=\text{A}(\text{BC})\)。
  • \((\text{A}+\text{B})\text{C}={\color{red}\text{AC}}+{\color{red}\text{BC}}\)。
  • \(\text{C}(\text{A}+\text{B})={\color{red}\text{CA}}+{\color{red}\text{CB}}\)。

初等变换(行)

列变换极其相似,这里省略。

  1. 对一整行乘上一个 \(val\)(\(val\in \text{R}\) 且 \(val\neq 0\))
  2. 一行加上另一行。
  3. 交换两行。

对矩阵进行这些操作之一就是初等变换。注意到这个东西很像一次方程的消元,高斯消元法就是用这个东西。

特殊矩阵

  • 稀疏矩阵:非 \(0\) 元素比较少。可以优化乘法。
  • 上三角:主对角线以下元素全为 \(0\),如

\[\begin{bmatrix} 1 & 1 & 1 \\ {\color{red}0} & 1 & 1 \\ {\color{red}0} & {\color{red}0} & 1 \\ \end{bmatrix} \]

  • 下三角:主对角线以上的元素全为 \(0\),如

\[\begin{bmatrix} 1 & {\color{red}0} & {\color{red}0} \\ 1 & 1 & {\color{red}0} \\ 1 & 1 & 1 \\ \end{bmatrix} \]

  • 对称矩阵:沿主对角线对称的元素。(满足 \(n=m\))

\[\begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 3 & 6 & 9 \\ \end{bmatrix} \]

  • 对角矩阵:非主对角线的元素全为 \(0\)。

\[\begin{bmatrix} 1 & {\color{red}0} & {\color{red}0} \\ {\color{red}0} & 2 & {\color{red}0} \\ {\color{red}0} & {\color{red}0} & 9 \\ \end{bmatrix} \]

  • 单位矩阵:在对角矩阵的情况下, 对角线全是 \(1\)。

\[\text{I}=\begin{bmatrix} 1 & {\color{red}0} & {\color{red}0} \\ {\color{red}0} & 1 & {\color{red}0} \\ {\color{red}0} & {\color{red}0} & 1 \\ \end{bmatrix} \]

  • 这个东西的性质:\(\text{AI}=\text{A}\),就是怎么乘都不会变。特别的,对这个矩阵进行初等变换后的矩阵称为初等矩阵 \(\text{E}\)。

矩阵快速幂

我们有一个递推式:

\[\begin{bmatrix} F_{n} & F_{n-1} & \dots & F_{n-k+1} \end{bmatrix} \]

我们要由

\[\begin{bmatrix} F_{n-k+1} & F_{n-k} & \dots & F_{n-2(k+1)} \end{bmatrix} \]

的矩阵推出来。

我们中间就需要一个转移矩阵。

\[\text{Base}=\begin{bmatrix} b_{11} & b_{12} & \dots & b_{1k} \\ b_{21} & b_{22} & \dots & b_{2k} \\ \dots & \dots & \dots & \dots \\ b_{k1} & b_{k2} & \dots & b_{kk} \\ \end{bmatrix} \]

我们发现这满足 \(\begin{bmatrix} F_{n-k+1} & F_{n-k} & \dots & F_{n-2(k+1)} \end{bmatrix}\times \text{Base}= \begin{bmatrix} F_{n} & F_{n-1} & \dots & F_{n-k+1} \end{bmatrix}\)。

然后我们直接快速幂就可以快速根据初始矩阵转移出答案 \(F_{n}\)。

斐波那契数列

由于下方只有构造矩阵有意义,所以只给出矩阵。

我们有一个目标的矩阵:

\[\begin{bmatrix} F_n & F_{n-1} \end{bmatrix} \]

我们一开始有一个初始的矩阵:

\[\begin{bmatrix} F_2 & F_{1} \end{bmatrix}= \begin{bmatrix} 1 & 1 \end{bmatrix} \]

我们怎么转移呢?

\[\text{Base}=\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \]

即 \(F_{n}=1\times F_{n-1}+1\times F_{n-2}\),\(F_{n-1}=1\times F_{n-1}+0\times F_{n-2}\)。

斐波那契数列的和

即 \(s_n=\sum_{i=1}^nf_{i}\)。

偷懒者:我不推矩阵。

我们发现 \(s_n=2\times f_n+f_{n-1}-1\)。

为什么?我们拆!

\[\begin{aligned} f_n &= f_{n-1}+f_{n-2} \\ &= f_{n-2}+f_{n-2}+f_{n-3} \\ &= f_{n-2}+f_{n-3}+f_{n-3}+f_{n-4} \\ &= \dots \\ &= f_{n-2}+f_{n-3}+\dots+f_{3}+f_{3}+f_{2} \\ &= f_{n-2}+f_{n-3}+\dots+f_{3}+f_{2}+f_{2}+f_{1} \\ &= f_{n-2}+\dots+f_{2}+f_{1}+{\color{red}f_{2}} \\ &= s_{n-2}+{\color{red}1} \end{aligned} \]

所以 \(s_n=2\times f_n+f_{n-1}-1=s_{n-2}+1+f_{n-1}+f_{n}-1\)。

好的这是偷懒者,真是个好方法!

我们考虑普通人的解:

我们有一个目标矩阵:

\[\begin{bmatrix} F_{n+1} & F_{n} & S_{n} \end{bmatrix} \]

我们一开始有一个初始的矩阵:

\[\begin{bmatrix} F_2 & F_{1} & S_{1} \end{bmatrix}= \begin{bmatrix} 1 & 1 & 1 \end{bmatrix} \]

那么我们推一下目标矩阵:

\[\text{Base}=\begin{bmatrix} 1 & 1 & ? \\ 1 & 0 & ? \\ ? & ? & ? \end{bmatrix} \]

首先,我们发现求 \(F\) 不需要 \(S\) 参与,所以:

\[\text{Base}=\begin{bmatrix} 1 & 1 & ? \\ 1 & 0 & ? \\ {\color{gold}0} & {\color{gold}0} & ? \end{bmatrix} \]

然后,我们需要一个 \(S_{n-1}\) 和一个 \(F_{n}\),推出 \(S_{n}\),相当于:\(S_{n}=1\times F_{n}+0\times F_{n-1}+1\times S_{n-1}\) 所以:

\[\text{Base}=\begin{bmatrix} 1 & 1 & {\color{gold}1} \\ 1 & 0 & {\color{gold}0} \\ 0 & 0 & {\color{gold}1} \end{bmatrix} \]

这样,你就独立完成了推理。

图上路径数(迷路弱化版)

就是给你一个图,要求 \(u\) 到 \(v\) 的路上正好 \(k\) 条的路径数。

我们定义一个状态:\(f_{i}\) 表示结束到 \(i\) 点的路径数。

每一次矩阵乘法,都是对矩阵迭代的一次,那么具体 \(\text{Base}\) 怎么写呢?

我们注意到每一条边,都将是一个有效迭代,所以 \(\text{Base}_{uv}\) 就是边数。

有点过于简单了。

啊不对我怎么跑了 \(1000ms+\),好慢。我们可以发现这个矩阵是稀疏矩阵。 然后我们直接用专属优化即可,即枚举顺序 \(i\to k\to j\),其中一旦找到 \(a_{i,k}=0\),就停止。我们就这样优化到了 \(250ms+\)。

CF1117D

为什么题目那么多 xht37 /jy

就是你每一次可以加 \(1\) 个或 \(m\) 个宝石,然后求出恰好有 \(n\) 个宝石的方案数。

容易列出

\[ f_i=\begin{cases} 1 & {i=0} \\ 0 & {0<i<m}\\ f_{i-1}+f_{i-m} & {i\ge m} \end{cases} \]

的转移式子 XD,然后直接做。

对应的,我们可以推出所有 \(\text{A}_{ii}=1\)。

\(\text{Base}_{1m}=\text{Base}_{11}=1\)。

然后所有 \(\text{Base}_{i+1,i}=1\)。

结束!(?)


https://www.luogu.com.cn/article/04oe6lnp

posted @ 2026-10-12 11:47  Ivan422  阅读(5)  评论(0)    收藏  举报