线性代数听课笔记

基本定义

  • 线性空间
  • 线性相关、线性无关
  • 矩阵的秩
  • 像空间与核空间(im,ker)
  • 线性代数基本定理

高斯消元

初等行变换相当于左乘一个特殊矩阵。

求逆:对 (A|I) 跑高斯-约旦,即可拿到 (I|A1)

PLU 分解

  • 初等行变换里,『一行加到零一行』、『一行乘 k』都可以表示为下三角矩阵,消出来的结果是上三角矩阵。

  • 注意边做边交换和先交换再做本质相同,于是 A=PLU,其中分别是排列 Permutation、下三角 Lower、上三角 Upper。

  • 实际写代码时不能模拟 L 上的乘积,但是可以边消元边一列一列算。

  • 应用:多组询问解方程 Ax=b,其中 A 不变,先 n^3 算出 A=PLU,然后有 PLUx=bUx=L1P1b 从而预处理矩阵逆之后可以 n^2 回答一次。

关于有限域

  • mod 2(异或方程组):bitset 优化。

  • mod p:直接做。

  • mod 合数:辗转相除。

这里还应该有一个主元法的例题,但是我觉得我会。没啥好写的。

线性基

『动态维护极大线性无关向量组』

每次插入一个向量都依次被主元对应位消元,直到对应位空或消空。类比高斯消元。

一个扩展是类比高斯-约旦消元,找到空位后先用其下方的向量消元、再消元其上方的向量。好处是每个主元只会在线性基里出现一次。

一些简单应用是最大权线性基,第 k 大 xor(这个就是那个扩展),是否包含于线性空间,线性基合并(启发式合并)。

可删线性基:本质还是离线算法(需要知道删除时间),但是比线段树分治少个 log。

  • 插入的时候带上删除时间。每次两个向量消元的时候都判一下、用删除时间更早的往下插入。

线性基求交:转化为核空间的并的核空间,难点在于建出核空间对应的线性基。

  • 贴两张图片,图源维基百科。 pic1 pic2

  • 大致描述过程:往基向量下方贴一个单位矩阵,将上面的线性基按列变换消元,下面的 I 的后若干列向量就是核空间的一组基。

  • Quack 的课件里还有一种神秘的凑系数方法,但是复杂度一样的。

  • 注意对压位异或线性基可以位运算加速。

翻维基的时候注意到了一个有趣的结论,不知道有没有用,总之先甩在这里:计算机科学里的浮点数矩阵一定满秩。

Schwartz–Zippel Lemma

对有限域 F 内的 mn 次多项式 f(x1,,xm),若 i,xiF 内均匀随机取值,则 f(x1,,xm)=0 的概率是 n/|F|(甚至与 m 无关)。因为 OI 里的应用一般都取 |F|>108,所以可以直接看作一定非零。

一个经典的应用是给出 n 阶矩阵 A,B,C,判断是否有 AB=C

  • 做法是随机一个向量 x 并判定模意义下 ABx=Cx。判断错 iff 对于非零矩阵 M=ABC,Mx=0
  • 这里相当于是有 nn 元一次多项式,每一个他等于零的概率都是 1/P,所以这个的错误率看似是 Pn
  • 但是这 n 个随机事件他不独立,直接 xjb 放缩能拿到一个极松的上界 n/P

行列式

快速过一下:

  • 逆序对形式定义
  • 余子式,Laplace 展开
  • 高斯消元求行列式
  • 积和式(NP)
  • detA=detAT,det(AB)=detAdetB

记一个问题:矩阵里都是一次函数,需要选常数项非零的作为代表元,选不出来怎么办?

  • 有一个想法是整列除以 x,这样就把一次项拿成常数项了。
  • 但是有个问题:已经被消元过的行里可能会有带常数的项,怎么办?
  • 注意我们只需要知道最后的主对角线,那么更上面的行都可以直接忽略。
  • 于是直接把下面的除了,上面的不管他。

Cauthy-Binet Formula

det(AB)=S([n]m)det(A[m],S)det(BS,[m])

[n] 表示集合 [1,n]Z

可以看作是行列式的一个组合意义:对于 m×n 矩阵 An×m 矩阵 B,得到的 m×m 矩阵 AB 的行列式等于对应下标集合的【 A 的若干列、B 的若干行的行列式的乘积】求和。

例一

用线性代数知识判断一给定 n,n 二分图是否存在完美匹配。

根据定义,能发现完美匹配数量就是邻接矩阵(好像不能叫这个名字?)的积和式。

判定积和式非零,只需要给矩阵里所有非零位随机赋权求行列式,行列式为零则积和式几乎一定为零,错误率依然可以用 Schwartz–Zippel Lemma 捏出来。

例二

有点垃圾。跳了。

例三 LOJ 3409

两个小问。

  • mod 3 意义下,给 nm 维向量,保证其张成空间 V 也是 m 维,从中选 m 个向量是 V 的一组基的方案数。
  • mod 2 意义下,给 nm 维向量,每个向量有颜色,保证其张成空间 V 也是 m 维,每种颜色选一个向量、是 V 的一组基的方案数。

考虑 Cauthy-Binet formula。设这 n 个行向量的堆叠是 A,考察 det(ATA) 的组合意义。

对于一个集合 S,其对行列式的贡献是 det(A[m],ST)det(AS,[m])=det(A[m],S)2。发现 mod 3 意义下 12221?于是有值的集合都恰好贡献 1。

对于第二问,设颜色矩阵 CCij 表示第 i 个向量的颜色是不是 jdet(ATC) 的组合意义类比。发现 mod 2 意义下 11,于是有值的集合都恰好贡献 1。

于是都直接跑行列式即可。

例四

求矩阵的伴随矩阵。定义是 adj(A)ij 表示 A 的在 j,i 处的代数余子式。

一个性质是 Aadj(A)=detAIn

于是若 A 满秩可以直接求逆。

如果 rk(A)n2,那么 A 的任意余子式都不满秩,显然伴随矩阵是 0n

否则就是 rk(A)=n1,此时:

  • 矩阵非空,所以 rk(adj(A))1
  • Aadj(A)=0n,所以 adj(A) 的每个列向量都包含于 A 的核空间。所以 rk(adj(A))1

所以 rk(adj(A))=1,于是 adj(A) 的任两行成倍数、任两列成倍数。求出一个 pA=0,Aq=0,搭配一个 adj(A) 的非零位,即可凑出 adj(A),理解一下。

LGV 引理

detE= DAG 上 n 个起点 n 个终点,所有 n 条路径不在点上相交时的权值积的带符号和。

其中 Eij 表示从起点 i 到终点 j 的路径权值。

证明就是行列式的定义。能不交是因为相交的情况会算重并自己抵消。

权值设成路径条数即可计数。

例零

网格图,求路径不交方案数。起点在一排;终点在一排。

注意此时不交 iff 按顺序对应。所以带符号和就是直接路径计数。

后面两个例题有点板??不放上来了。

关于 Menger 定理

Menger 定理:DAG 中不相邻顶点 x,yP 是一些 xy 路径的集合,满足路径只在 x,y 处相交。

f(x,y)=|P|maxg(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 学长的博客写的很通透啊!

仔细研读了。这写的也太不清楚了。按他的顺序用人话说一遍。

定理本身(证明)

有利用关联矩阵 + Cauchy-Binet 公式的证明。但是这里介绍容斥的方法。

考虑任意删掉一个点 r,任意钦定剩下点的出边使不成环的方案数。

容斥:任选出边 - 钦定一个环剩下任选 + 钦定两个环剩下任选 ……

思考这和行列式有什么关系:枚举排列 pi,若 pi=i 则这是任选的点,对方案数的贡献是 Di;否则 pii 这就是钦定的环,对方案数的贡献是 Gi,pi。也就是每个 2 的置换环是钦定环,1 的自环是任选。

考虑凑容斥系数:一个经典结论是排列逆序对数 模二同余 n-置换环数量,这也等于 置换环大小减一求和。发现只需要给每个 2 的置换环里的所有贡献取负,那么:1 的置换环贡献仍是 0,每个 2 的置换环贡献都为 1,这正好是我们容斥的系数。

2 的置换环里的所有贡献就是所有的 G。于是 det(DG) 即为答案。

上面的证明可以套到内向树上。外向树反过来即可。

推广

比如这么一道题:每个点选一条出边,问形成的基环树森林的权值和,其中若有一个偶环则权值是零,否则是二的环数次方。

还是考虑钦定环的方法、把有偶环的都容斥掉,于是一组钦定的系数就是 (1)偶环数。仍然利用上面逆序对数的结论,随便捏一下能知道答案就是 det(D+G)

逆用

题一:给你一个点仙人掌,无重边自环,求其邻接矩阵的行列式。

  • 也就是求每个排列贡献的符号之和。先看一个确定排列的贡献:
  • 不存在自环,则若 pi=i 就贡献零了。
  • 本质上就两种情况:pi=j,pj=i,相当于一条无向边做贡献;置换环 3,相当于选了仙人掌上的一整个环。
  • 而一个排列的逆序数同余于偶环数量。直接往仙人掌(圆方树)上 DP 即可,转移比较简单?
  • 一个要注意的地方是一个大环可以顺着反着贡献两次。

题二:给你一棵树,构造矩阵 M,满足 Mfai,i=ai,Mi,fai=bi,Mi,i=ci,剩下位置都是 x,求 M 的行列式。(qoj7408)

  • 先考虑 x=0 怎么做?发现这就是只能选单点贡献 cu 和选无向边贡献 aubv 的情况。于是可以简单树 DP。
  • 发现 x>0 的难点是可能选择 pu=v 使 u,v 在树上没边。
  • 你设 M=P+X,其中 X=xnn,行列式可以拆成 p(1)inv(p)ip(Pi,pi+x)
  • 考虑拆括号,如果一项有因子 x2,那么可以对于 pi=pj,pj=pi,发现他们拆出来的这一项权值相同、符号相反,直接抵消了。(Quack PPT 里这里写错了,他写成一对排列的全部贡献都能抵掉。)
  • 你考虑这意味着什么:如果一个 p 的选法里有 i,j 使 Pi,pi=Pj,pj=0(即选到两条不存在的边),那么任一拆到 P 侧都没贡献、均拆到 x 侧也没贡献。
  • 于是也就是至多选一条不存在的边贡献 x,或选边全在树上、选零或一条边贡献 x
  • 可树 DP 解决。

BEST 定理

Quack 说没用?之后再学吧。

本文作者:PrimalAspid

本文链接:https://www.cnblogs.com/hagasei/p/18648836

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   PrimalAspid  阅读(134)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起