Login to join training plan
矩阵基础
https://oi-wiki.org/math/linear-algebra/matrix/
通俗理解,矩阵就是一个二维数组。例如:$A = \begin{bmatrix} A_{1, 1} & A_{1, 2} & \dots & A_{1, m}\\ A_{2, 1} & A_{2, 2} & \dots & A_{2, m}\\ \vdots & \vdots & \ddots & \vdots\\ A_{n, 1} & A_{n, 2} & \dots & A_{n, m}\end{bmatrix}$
矩阵信息:
- 行数,列数;
- 每行每列的元素;
- 秩,行列式;
名称
主对角线: 的元素;
方阵:行列数都为 的矩阵叫做方阵。
上三角矩阵:以 到 的对角线为界,左下全都是 的矩阵。
初等行列变换
https://oi-wiki.org/math/linear-algebra/elementary-operations/#%E5%88%9D%E7%AD%89%E5%8F%98%E6%8D%A2
初等行列变换:
- 交换任意两行或两列;
- 某一行增加 倍的另一行 或 某一列增加 倍的另一列;
- 某一行扩大 倍 或 某一列扩大 倍;
初等行列变换的形式简单,但性质不变。
高斯消元
https://oi-wiki.org/math/linear-algebra/gauss/
利用矩阵初等行列变换将方阵消成上三角矩阵。
操作:
- 用第一行乘以相应的系数消掉 行的第一列;
- 用第二行乘以相应的系数消掉 行的第二列;
- ......
- 用第 行乘以相应的系数消掉 ] 行的第 列;
本质上就是个加减消元法。
高斯消元的应用:
- 解多元一次方程;
- 求矩阵的秩;
- 求矩阵的行列式;
时间复杂度 。
矩阵乘法
https://oi-wiki.org/math/linear-algebra/matrix/#%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95
有结合律,没有交换律。
,那么结果有如下规律:
的行数是 的行数, 的列数是 的列数。
的列数和 的行数应当相等,假设为 。
是 的第 行和 的第 列按位相乘再加和的结果,即 $C_{i, j} = A_{i, 1}\times B_{1, j} + A_{i, 2}\times B_{2, j} + \dots + A_{i, k}\times B_{k, j}$。
矩阵求逆
https://oi-wiki.org/math/linear-algebra/matrix/#%E6%96%B9%E9%98%B5%E7%9A%84%E9%80%86
假设矩阵 的逆矩阵 ,那么可以得到:
。
是除了主对角线是 ,其余都为 的矩阵。即 $I = \begin{bmatrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & \ddots & 0\\0 & 0 & 0 & 1\end{bmatrix}$。
将 和 拼在一起,将 高斯消元消成 ,右面的 跟着做同样的初等行列变换,这样 最后的结果就变成了 。
矩阵快速幂
把快速幂原理应用到矩阵上就可以求 。
快速幂函数不变,把整型变成矩阵型 (struct
) 即可。
注意重载矩阵乘法运算符。
时间复杂度 。
优化递推(DP)
如果要快速求 的值,其中 表示斐波那契数列,那么可以用矩阵快速幂的方法。
由于 ,所以可以通过下面的方法求解 。
定义两个 的矩阵 和 。其中 , 初始为 。
将 更新成 与 的乘积,即 $F = \begin{bmatrix}f_1 \times 0 + f_2 \times 1 & f_1 \times 1 + f_2 \times 1\\0 \times 0 + 0 \times 1 & 0 \times 1 + 0 \times 1\\\end{bmatrix} = \begin{bmatrix}f_2 & f_3\\0 & 0\\\end{bmatrix}$,那么此时我们就得到了 的值。
同理,如果再次 ,我们也可以得到 的值。那么如果要得到 的值只需要计算 即可,那么最后就有 。
这样我们就把求斐波那契数列的 的复杂度降到了 ,是十分优秀的。
这样我们就把一个递推问题通过矩阵快速幂的形式进行了优化,同理对于一些其它的递推式也是可以通过类似的方法优化。
数学性质
-
在 质数意义下 逆元互不相同。
-
-
两个不同数的 不会超过两个数的差。
-
$\gcd(a, b) = 1 \Longleftrightarrow \gcd(a + k \times b, b) = 1$
-
-
个 随机变量的期望 小是 。
-
在 中, 都不会对答案产生影响。
-
$\sum\limits_{i = 0}^k C_{n + r - 1}^r = C_{n + k}^k$
-
-
卡特兰数:
- $h_n = \sum\limits_{i = 0}^{n - 1}h_i \times h_{n - i - 1} = \dfrac{C_{2n}^n}{n + 1}$
-
$\left\lceil \dfrac AB \right\rceil = \left\lfloor \dfrac{A+B-1}B \right\rfloor$
- Enrollees
- 5
- Created By