基本定义
- 线性空间
- 线性相关、线性无关
- 基
- 矩阵的秩
- 像空间与核空间(im,ker)
- 线性代数基本定理
高斯消元
初等行变换相当于左乘一个特殊矩阵。
求逆:对 \((A|I)\) 跑高斯-约旦,即可拿到 \((I|A^{-1})\)。
PLU 分解:
-
初等行变换里,『一行加到零一行』、『一行乘 k』都可以表示为下三角矩阵,消出来的结果是上三角矩阵。
-
注意边做边交换和先交换再做本质相同,于是 \(A=PLU\),其中分别是排列 Permutation、下三角 Lower、上三角 Upper。
-
实际写代码时不能模拟 L 上的乘积,但是可以边消元边一列一列算。
-
应用:多组询问解方程 \(Ax=b\),其中 A 不变,先 n^3 算出 \(A=PLU\),然后有 \(PLUx=b\Rightarrow Ux=L^{-1}P^{-1}b\) 从而预处理矩阵逆之后可以 n^2 回答一次。
关于有限域:
-
mod 2(异或方程组):bitset 优化。
-
mod p:直接做。
-
mod 合数:辗转相除。
这里还应该有一个主元法的例题,但是我觉得我会。没啥好写的。
线性基
『动态维护极大线性无关向量组』
每次插入一个向量都依次被主元对应位消元,直到对应位空或消空。类比高斯消元。
一个扩展是类比高斯-约旦消元,找到空位后先用其下方的向量消元、再消元其上方的向量。好处是每个主元只会在线性基里出现一次。
一些简单应用是最大权线性基,第 k 大 xor(这个就是那个扩展),是否包含于线性空间,线性基合并(启发式合并)。
可删线性基:本质还是离线算法(需要知道删除时间),但是比线段树分治少个 log。
- 插入的时候带上删除时间。每次两个向量消元的时候都判一下、用删除时间更早的往下插入。
线性基求交:转化为核空间的并的核空间,难点在于建出核空间对应的线性基。
-
贴两张图片,图源维基百科。 pic1 pic2。
-
大致描述过程:往基向量下方贴一个单位矩阵,将上面的线性基按列变换消元,下面的 I 的后若干列向量就是核空间的一组基。
-
Quack 的课件里还有一种神秘的凑系数方法,但是复杂度一样的。
-
注意对压位异或线性基可以位运算加速。
翻维基的时候注意到了一个有趣的结论,不知道有没有用,总之先甩在这里:计算机科学里的浮点数矩阵一定满秩。
Schwartz–Zippel Lemma
对有限域 \(F\) 内的 \(m\) 元 \(n\) 次多项式 \(f(x_1,\dots,x_m)\),若 \(\forall i,x_i\) 在 \(F\) 内均匀随机取值,则 \(f(x_1,\dots,x_m)=0\) 的概率是 \(n/|F|\)(甚至与 \(m\) 无关)。因为 OI 里的应用一般都取 \(|F|>10^8\),所以可以直接看作一定非零。
一个经典的应用是给出 \(n\) 阶矩阵 \(A,B,C\),判断是否有 \(AB=C\)。
- 做法是随机一个向量 \(x\) 并判定模意义下 \(ABx=Cx\)。判断错 iff 对于非零矩阵 \(M=AB-C,Mx=0\)。
- 这里相当于是有 \(n\) 个 \(n\) 元一次多项式,每一个他等于零的概率都是 \(1/P\),所以这个的错误率看似是 \(P^{-n}\)。
- 但是这 \(n\) 个随机事件他不独立,直接 xjb 放缩能拿到一个极松的上界 \(n/P\)。
行列式
快速过一下:
- 逆序对形式定义
- 余子式,Laplace 展开
- 高斯消元求行列式
- 积和式(NP)
- \(\det A=\det A^T,\det(AB)=\det A\det B\)。
Cauthy-Binet Formula
(\([n]\) 表示集合 \([1,n]\cap\mathbb Z\))
可以看作是行列式的一个组合意义:对于 \(m\times n\) 矩阵 \(A\),\(n\times m\) 矩阵 \(B\),得到的 \(m\times m\) 矩阵 \(AB\) 的行列式等于对应下标集合的【 \(A\) 的若干列、\(B\) 的若干行的行列式的乘积】求和。
例一
用线性代数知识判断一给定 n,n 二分图是否存在完美匹配。
根据定义,能发现完美匹配数量就是邻接矩阵(好像不能叫这个名字?)的积和式。
判定积和式非零,只需要给矩阵里所有非零位随机赋权求行列式,行列式为零则积和式几乎一定为零,错误率依然可以用 Schwartz–Zippel Lemma 捏出来。
例二
有点垃圾。跳了。
例三 LOJ 3409
两个小问。
- mod 3 意义下,给 \(n\) 个 \(m\) 维向量,保证其张成空间 \(V\) 也是 \(m\) 维,从中选 \(m\) 个向量是 \(V\) 的一组基的方案数。
- mod 2 意义下,给 \(n\) 个 \(m\) 维向量,每个向量有颜色,保证其张成空间 \(V\) 也是 \(m\) 维,每种颜色选一个向量、是 \(V\) 的一组基的方案数。
考虑 Cauthy-Binet formula。设这 \(n\) 个行向量的堆叠是 \(A\),考察 \(\det(A^TA)\) 的组合意义。
对于一个集合 \(S\),其对行列式的贡献是 \(\det(A^T_{[m],S})\det(A_{S,[m]})=\det(A_{[m],S})^2\)。发现 mod 3 意义下 \(1^2\equiv 2^2\equiv 1\)?于是有值的集合都恰好贡献 1。
对于第二问,设颜色矩阵 \(C\),\(C_{ij}\) 表示第 \(i\) 个向量的颜色是不是 \(j\),\(\det(A^TC)\) 的组合意义类比。发现 mod 2 意义下 \(-1\equiv 1\),于是有值的集合都恰好贡献 1。
于是都直接跑行列式即可。
例四
求矩阵的伴随矩阵。定义是 \(\text{adj}(A)_{ij}\) 表示 A 的在 \(j,i\) 处的代数余子式。
一个性质是 \(A\text{adj}(A)=\det A\cdot I_n\)。
于是若 \(A\) 满秩可以直接求逆。
如果 \(\text{rk}(A)\leq n-2\),那么 \(A\) 的任意余子式都不满秩,显然伴随矩阵是 \(0_n\)。
否则就是 \(\text{rk}(A)=n-1\),此时:
- 矩阵非空,所以 \(\text{rk(adj}(A))\ge 1\)。
- \(A\text{adj}(A)=0_n\),所以 \(\text{adj}(A)\) 的每个列向量都包含于 \(A\) 的核空间。所以 \(\text{rk(adj}(A))\le 1\)。
所以 \(\text{rk(adj}(A))=1\),于是 \(\text{adj}(A)\) 的任两行成倍数、任两列成倍数。求出一个 \(pA=0,Aq=0\),搭配一个 \(\text{adj}(A)\) 的非零位,即可凑出 \(\text{adj}(A)\),理解一下。
LGV 引理
\(\det E=\) DAG 上 \(n\) 个起点 \(n\) 个终点,所有 \(n\) 条路径不在点上相交时的权值积的带符号和。
其中 \(E_{ij}\) 表示从起点 \(i\) 到终点 \(j\) 的路径权值。
证明就是行列式的定义。能不交是因为相交的情况会算重并自己抵消。
权值设成路径条数即可计数。
例零
网格图,求路径不交方案数。起点在一排;终点在一排。
注意此时不交 iff 按顺序对应。所以带符号和就是直接路径计数。
后面两个例题有点板??不放上来了。
关于 Menger 定理
Menger 定理:DAG 中不相邻顶点 \(x,y\),\(P\) 是一些 \(x\rightsquigarrow y\) 路径的集合,满足路径只在 \(x,y\) 处相交。
设 \(f(x,y)=|P|_{\max}\),\(g(x,y)\) 表示让 \(x,y\) 不联通至少需要删除几个点,则 \(f(x,y)=g(x,y)\)。
可以类比最大流最小割定理。
考虑这样一个问题:给定集合 \(A,B\),求 \(g(A,B)\)(这个记号显然地不严谨,但是应该能懂)。
-
建源点连向所有 \(A\),建汇点被所有 \(B\) 连。应用 Menger 定理,转化为 \(A\) 出发 \(B\) 结束的不交路径数量最值。
-
考虑确定了起点终点集合的情况改判定性问题。是否存在解,能不能直接跑 LGV 呢?不太能。有可能两个不交路径正负抵消了。
-
于是直接给边随机赋权算系数矩阵,这样 Schwartz–Zippel Lemma(并非)易知错误率不大。只要行列式非零就是一组合法的起点终点集合。
-
最大的行列式非零子集大小,就是矩阵的秩。
用这个也能跑(容量为 1 的)最大流,只需要把边点对偶,转化成 \(A\) 是源点的出边、\(B\) 是汇点的入边。容量为一正好限制了每一条流都不在(旧)边上相交。
两个例题没啥好放的??本关考验你 DS 功夫。
矩阵树定理
懒得写了。ly 学长的博客写的很通透啊!
明天有空写一下例题?