详见 《2017国家集训队论文》“基于线性代数的一般图匹配”
前言:这个东西比带花树好记多了
-
符号规定: A i , j A_{i,j} Ai,j 表示第 i i i 行第 j j j 列, A I , J A_{I,J} AI,J 表示暴力集合 I I I 中的行和集合 J J J 中的列剩下的矩阵, A I , J A^{I,J} AI,J 表示除去 I I I 中的行和 J J J 中的列的矩阵, r a n k A rank\ A rank A 表示矩阵 A A A 的秩
-
Tutte \text{Tutte} Tutte 矩阵,对于一个无向图 G = ( V , E ) G=(V,E) G=(V,E),定义 G G G 的 Tutte \text{Tutte} Tutte 矩阵为一个 n × n n\times n n×n 的矩阵 A ~ ( G ) \widetilde {A}(G) A (G)
A ~ ( G ) = x i , j ( v i v j ∈ E , i < j ) A ~ ( G ) = − x i , j ( v i v j ∈ E , i > j ) A ~ ( G ) = 0 ( v i v j , o t h e r w i s e ) \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)
-
定理:一个图 G G G 有完美匹配当且仅当 det A ~ ( G ) ≠ 0 \det \widetilde {A}(G)\neq0 detA (G)=0
证:我们知道, T u t t e Tutte Tutte 矩阵行列式的意义是枚举若干个环(有向)来分割这个图,若存在一个奇环,那么必定存在一个行列式使得这个奇环反向且其它不变,次数行列式系数取相反数,故若行列式不为 0,就一定存在一种全是偶环的分割方法,此时我们在偶环上两两匹配即可
-
判断完美匹配:我们随机一组 x x x 代入求出行列式判断是否为 0,对于值域取 F F F 的 不恒为 0 的 d d d 度多项式,设 r 1 , r 2 , … , r n r_1,r_2,\dots,r_n r1,r2,…,rn 是在 F F F 中选择的随机数,那么:
Pr [ P ( r 1 , r 2 , … , r n ) = 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 -
求完美匹配的方案:
枚举 v i v j v_iv_j vivj 检查 G − { v i , v j } G-\{v_i,v_j\} G−{vi,vj} 有没有完美匹配,复杂度爆炸
这时我们需要运用 T u t t e Tutte Tutte 矩阵的性质,我们知 T u t t e Tutte Tutte 矩阵是一个斜对称矩阵,记 A = − A T A=-A^{\text{T}} A=−AT
斜对称矩阵的性质
- 定理1:对于 n × n n\times n n×n 的斜对称矩阵 A A A,若 n n n 为奇数,则 ∣ A ∣ = 0 |A|=0 ∣A∣=0
证: ∣ A ∣ = ∣ − A T ∣ = − ∣ A ∣ , ∣ A ∣ = 0 |A|=|-A^{\text{T}}|=-|A|,|A|=0 ∣A∣=∣−AT∣=−∣A∣,∣A∣=0- 定理2:对于一个集合 I I I 使得 A i 1 , A i 2 , … , A i k A_{i_1},A_{i_2},\dots,A_{i_k} Ai1,Ai2,…,Aik 线性无关,则 ∣ A I , I ∣ ≠ 0 |A_{I,I}|\neq 0 ∣AI,I∣=0, A I , I A_{I,I} AI,I 的秩为 l l l
推论:存在 I = { i 1 , i 2 , … , i k } I=\{i_1,i_2,\dots,i_k\} I={i1,i2,…,ik} 满足 A I , I A_{I,I} AI,I 的秩为 k k k- 定理3:一个斜对称矩阵的秩为偶数,由定理2推之
- 定理4: A i , j ≠ 0 A^{i,j}\neq0 Ai,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)
必要性: A i , j ≠ 0 ⇒ r a n k A i , j = n − 1 ⇒ r a n k A { i , j } , { i , j } ≥ n − 3 ⇒ r a n k A { i , j } , { i , j } = n − 2 A^{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-2 Ai,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 ⇒ r a n k 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,而 r a n k A i , { i , j } = r a n k A i , i = n − 2 rank\ A^{i,\{i,j\}}=rank \ A^{i,i}=n-2 rank Ai,{i,j}=rank Ai,i=n−2,故 A i , ∅ A^{i,\empty} Ai,∅ 的第 j j j 列是其余列的线性组合,故 r a n k A i , j = n − 1 ⇒ ∣ A i , j ∣ ≠ 0 rank \ A^{i,j}=n-1\Rightarrow |A^{i,j}|\neq 0 rank Ai,j=n−1⇒∣Ai,j∣=0
-
于是我们有了更快捷的判断方法:
定理:对于图 G = ( V , E ) G=(V,E) G=(V,E),与其 T u t t e Tutte Tutte 矩阵 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 − { v i v j } G-\{v_iv_j\} G−{vivj} 有完美匹配,中间用到了 A − 1 = A ∗ / ∣ A ∣ A^{-1}=A^*/|A| A−1=A∗/∣A∣,与定理 4
于是我们可以求 n n n 次逆,复杂度 O ( n 4 ) O(n^4) O(n4) -
优化:注意到我们的矩阵每次只是去除一行一列,考虑构造出新矩阵的逆
对 A − 1 A^{-1} A−1 做矩阵初等变换即可得到 B B B
至此,我们可以在 O ( n 3 ) O(n^3) O(n3) 的时间构造出完美匹配的方案 -
一般匹配:
定理:图 G G G 的最大匹配数为 k = 1 2 r a n k A ~ ( G ) k=\frac{1}{2}rank\ \widetilde A(G) k=21rank A (G),利用定理2 可以证明
于是我们可以新建 n − 2 ∗ k n-2*k n−2∗k 个点与 n n n 个点连边,就一定有完美匹配,同时可以求出最大匹配
其实没有必要这么麻烦,我们用高斯消元求出这个最大无关向量组及其所形成的矩阵 A I , I A_{I,I} AI,I 即可 -
判断一个点是否在最大匹配上:对于新增的 n − 2 k n-2k n−2k 个点,即为 v j v_j vj,原来的点记为 v i v_i vi,若 G − { v i , v j } G-\{v_i,v_j\} G−{vi,vj} 是完美匹配,那么 v i v_i vi 可能不在最大匹配上,我们只需要判断 ( A ~ ( G ) ) i , j − 1 ≠ 0 (\widetilde A(G))^{-1}_{i,j}\neq 0 (A (G))i,j−1=0 即可
-
带权匹配:
没有边的用 0 边补上(让其一定存在完美匹配),引入一个新元 y y y,令 A ~ ( G ) ′ = A ~ ( G ) ∗ y w i , j \widetilde A(G)'=\widetilde A(G)*y^{w_{i,j}} A (G)′=A (G)∗ywi,j,于是问题变成求 ∣ A ~ ( G ) ′ ∣ |\widetilde A(G)'| ∣A (G)′∣ 中 y y y 的最高项系数,拉格朗日插值
复杂度 O ( W n 3 + W 2 ) O(Wn^3+W^2) O(Wn3+W2)