详见 《2017国家集训队论文》“基于线性代数的一般图匹配”
前言:这个东西比带花树好记多了
-
符号规定:Ai,jA_{i,j}Ai,j 表示第 iii 行第 jjj 列,AI,JA_{I,J}AI,J 表示暴力集合 III 中的行和集合 JJJ 中的列剩下的矩阵,AI,JA^{I,J}AI,J 表示除去 III 中的行和 JJJ 中的列的矩阵,rank Arank\ Arank A 表示矩阵 AAA 的秩
-
Tutte\text{Tutte}Tutte 矩阵,对于一个无向图 G=(V,E)G=(V,E)G=(V,E),定义 GGG 的 Tutte\text{Tutte}Tutte 矩阵为一个 n×nn\times nn×n 的矩阵 A~(G)\widetilde {A}(G)A(G)
A~(G)=xi,j(vivj∈E,i<j)A~(G)=−xi,j(vivj∈E,i>j)A~(G)=0(vivj,otherwise)\widetilde {A}(G)=x_{i,j}(v_iv_j\in E,i<j)\\ \widetilde {A}(G)=-x_{i,j}(v_iv_j\in E,i>j)\\\widetilde {A}(G)=0(v_iv_j,otherwise)A(G)=xi,j(vivj∈E,i<j)A(G)=−xi,j(vivj∈E,i>j)A(G)=0(vivj,otherwise)

-
定理:一个图 GGG 有完美匹配当且仅当 detA~(G)≠0\det \widetilde {A}(G)\neq0detA(G)=0
证:我们知道,TutteTutteTutte 矩阵行列式的意义是枚举若干个环(有向)来分割这个图,若存在一个奇环,那么必定存在一个行列式使得这个奇环反向且其它不变,次数行列式系数取相反数,故若行列式不为 0,就一定存在一种全是偶环的分割方法,此时我们在偶环上两两匹配即可

-
判断完美匹配:我们随机一组 xxx 代入求出行列式判断是否为 0,对于值域取 FFF 的 不恒为 0 的 ddd 度多项式,设 r1,r2,…,rnr_1,r_2,\dots,r_nr1,r2,…,rn 是在 FFF 中选择的随机数,那么:
Pr[P(r1,r2,…,rn)=0]=d∣F∣\text{Pr}[P(r_1,r_2,\dots,r_n)=0]=\frac{d}{|F|}Pr[P(r1,r2,…,rn)=0]=∣F∣d -
求完美匹配的方案:
枚举 vivjv_iv_jvivj 检查 G−{vi,vj}G-\{v_i,v_j\}G−{vi,vj} 有没有完美匹配,复杂度爆炸
这时我们需要运用 TutteTutteTutte 矩阵的性质,我们知 TutteTutteTutte 矩阵是一个斜对称矩阵,记 A=−ATA=-A^{\text{T}}A=−AT
斜对称矩阵的性质
- 定理1:对于 n×nn\times nn×n 的斜对称矩阵 AAA,若 nnn 为奇数,则 ∣A∣=0|A|=0∣A∣=0
证:∣A∣=∣−AT∣=−∣A∣,∣A∣=0|A|=|-A^{\text{T}}|=-|A|,|A|=0∣A∣=∣−AT∣=−∣A∣,∣A∣=0- 定理2:对于一个集合 III 使得 Ai1,Ai2,…,AikA_{i_1},A_{i_2},\dots,A_{i_k}Ai1,Ai2,…,Aik 线性无关,则 ∣AI,I∣≠0|A_{I,I}|\neq 0∣AI,I∣=0,AI,IA_{I,I}AI,I 的秩为 lll
推论:存在 I={i1,i2,…,ik}I=\{i_1,i_2,\dots,i_k\}I={i1,i2,…,ik} 满足 AI,IA_{I,I}AI,I 的秩为 kkk- 定理3:一个斜对称矩阵的秩为偶数,由定理2推之
- 定理4:Ai,j≠0A^{i,j}\neq0Ai,j=0 当且仅当 A{i,j},{i,j}≠0(i≠j)A^{\{i,j\},\{i,j\}}\neq 0(i\neq j)A{i,j},{i,j}=0(i=j)
必要性:Ai,j≠0⇒rank Ai,j=n−1⇒rank A{i,j},{i,j}≥n−3⇒rank A{i,j},{i,j}=n−2A^{i,j}\neq 0\Rightarrow rank\ A^{i,j}=n-1 \Rightarrow rank\ A^{\{i,j\},\{i,j\}}\ge n-3\Rightarrow rank\ A^{\{i,j\},\{i,j\}}=n-2Ai,j=0⇒rank Ai,j=n−1⇒rank A{i,j},{i,j}≥n−3⇒rank A{i,j},{i,j}=n−2
充分性:∣A{i,j},{i,j}∣≠0⇒rank A{i,j},{i,j}=n−2|A^{\{i,j\},\{i,j\}}|\neq 0\Rightarrow rank\ A^{\{i,j\},\{i,j\}}=n-2∣A{i,j},{i,j}∣=0⇒rank A{i,j},{i,j}=n−2,而 rank Ai,{i,j}=rank Ai,i=n−2rank\ A^{i,\{i,j\}}=rank \ A^{i,i}=n-2rank Ai,{i,j}=rank Ai,i=n−2,故 Ai,∅A^{i,\empty}Ai,∅ 的第 jjj 列是其余列的线性组合,故 rank Ai,j=n−1⇒∣Ai,j∣≠0rank \ A^{i,j}=n-1\Rightarrow |A^{i,j}|\neq 0rank Ai,j=n−1⇒∣Ai,j∣=0
-
于是我们有了更快捷的判断方法:
定理:对于图 G=(V,E)G=(V,E)G=(V,E),与其 TutteTutteTutte 矩阵 A~(G)\widetilde A(G)A(G),(A~(G))i,j−1≠0(\widetilde A(G))^{-1}_{i,j}\neq 0(A(G))i,j−1=0 当且仅当 G−{vivj}G-\{v_iv_j\}G−{vivj} 有完美匹配,中间用到了 A−1=A∗/∣A∣A^{-1}=A^*/|A|A−1=A∗/∣A∣,与定理 4
于是我们可以求 nnn 次逆,复杂度 O(n4)O(n^4)O(n4) -
优化:注意到我们的矩阵每次只是去除一行一列,考虑构造出新矩阵的逆


对 A−1A^{-1}A−1 做矩阵初等变换即可得到 BBB
至此,我们可以在 O(n3)O(n^3)O(n3) 的时间构造出完美匹配的方案 -
一般匹配:
定理:图 GGG 的最大匹配数为 k=12rank A~(G)k=\frac{1}{2}rank\ \widetilde A(G)k=21rank A(G),利用定理2 可以证明
于是我们可以新建 n−2∗kn-2*kn−2∗k 个点与 nnn 个点连边,就一定有完美匹配,同时可以求出最大匹配
其实没有必要这么麻烦,我们用高斯消元求出这个最大无关向量组及其所形成的矩阵 AI,IA_{I,I}AI,I 即可 -
判断一个点是否在最大匹配上:对于新增的 n−2kn-2kn−2k 个点,即为 vjv_jvj,原来的点记为 viv_ivi,若 G−{vi,vj}G-\{v_i,v_j\}G−{vi,vj} 是完美匹配,那么 viv_ivi 可能不在最大匹配上,我们只需要判断 (A~(G))i,j−1≠0(\widetilde A(G))^{-1}_{i,j}\neq 0(A(G))i,j−1=0 即可
-
带权匹配:
没有边的用 0 边补上(让其一定存在完美匹配),引入一个新元 yyy,令 A~(G)′=A~(G)∗ywi,j\widetilde A(G)'=\widetilde A(G)*y^{w_{i,j}}A(G)′=A(G)∗ywi,j,于是问题变成求 ∣A~(G)′∣|\widetilde A(G)'|∣A(G)′∣ 中 yyy 的最高项系数,拉格朗日插值
复杂度 O(Wn3+W2)O(Wn^3+W^2)O(Wn3+W2)
本文探讨了基于线性代数的图匹配问题,详细介绍了Tutte矩阵的定义及性质,阐述了如何通过Tutte矩阵的行列式判断图是否存在完美匹配,并提出了高效的匹配算法。此外,还讨论了一般匹配、带权匹配等问题。
9914

被折叠的 条评论
为什么被折叠?



