矩阵树定理证明
End_Sunset · · 算法·理论
0 前言
矩阵树定理严谨彻底的证明常常对选手的 OI 学习造成困难。本文参考了 一篇有关矩阵树的题解 和 OI-wiki的证明,两种证明的思路和过程大相径庭。由于两篇文章都只描述了主要思路的证明,本文根据二者思路进行了严谨地证明并补全了相关引理的证明。其中本文的后一种证明方式更(?)适合 OI 选手食用。
1 约定
1.1 记号
1.2 图的矩阵
1.2.1
- 度数矩阵
D_{i,i}(G)=\deg(i) 。 - 邻接矩阵
A(G) 。1.2.2 Laplace矩阵
- 对于有向图,有:
-
- 对于无向图
L(G)=D(G)-A(G) 。1.2.3 关联矩阵
- 对于有向图
-
\begin{cases} \sqrt{w(e_i)} & e_i=(j \to v) \\ 0 &\mathrm{otherwise} \end{cases} -
\begin{cases} \sqrt{w(e_i)} & e_i=(u \to j) \\ 0 &\mathrm{otherwise} \end{cases}
-
- 对于无向图,对边随意定向,
M=M^{out}-M^{in} 。1.2.3 变换
- 我们定义关于矩阵的变换
L[S,S'] 表示仅包括原矩阵的以S 中元素为序号的列和以S' 中元素为序号的行的子矩阵。其中不包括k 行的矩阵表示为L([n \setminus k,[n]] 。 - 我们定义矩阵的转置
L^T 表示:L_{i,j}=L^T_{j,i}
1.3 matrix-tree 定理
- 无向图的生成树数量为
\det L(G)[[n] \setminus k,[n] \setminus k] 。 - 有向图以
k 为根的根向树数量为\det L^\mathrm{out}(G)[[n] \setminus k,[n] \setminus k] 。 - 有向图以
k 为根的叶向树数量为\det L^\mathrm{in}(G)[[n] \setminus k,[n] \setminus k] 。
2. 常规证明
依照 OI-wiki 的证明思路,以更清晰和完整的过程证明。以下思路摘自 OI-wiki。
- 首先,所有情形都可以转化为计数有向图根向树的情形;
- 利用矩阵语言给出选出的若干边可以构成根向树形图的充要条件;
- 将选边的操作利用 Cauchy–Binet 公式和 Laplace 矩阵的行列式联系起来;
- 最后,将行列式形式的结论转化为特征值形式的结论。
2.1 引理证明
2.1.1 Lemma 1
L^{out}(G)=(M^{out})^T(M^{out}-M^{in})
证明:
直接展开即可。
考虑每一条边,
将因式相乘,考虑验证 Laplace 中度数矩阵所在的对角线:
同理,考虑验证邻接矩阵:
2.1.2 Lemma 2
对于图
G 我们选取一个边集S 及其联结的点集W ,
- 那么子图
(W,S) 不构成一棵根向树,当且仅当:\det (M^{out}[S,W]) \det(M^{out}[S,W]-M^{in}[S,W])=0 - 如果构成一棵根向树,当且仅当:
\det (M^{out}[S,W]) \det(M^{out}[S,W]-M^{in}[S,W])= \prod w(e)
证明:
转化
根据定义,
出于方便,我们钦定左式的第一个因式为
case 1
考虑证明 Lemma2 的第一个情况。考虑证明其否命题,
-
考虑第一个因式,由于
M 的每行有且仅有一个 1,显然:- 如果每列仅有一个数,那么矩阵行向量一定线性不相关;
- 如果行向量线性相关那么一定有两个行向量相等。
-
容易证明
\det M 不为 0 的充要条件为不存在两个相同的行,考虑其图论意义,即不存在两条边有相同的终点,即形成根向树不能有多个父节点。所以\det M 不为 0 是形成根向树的必要条件。 -
显然,在满足不共用终点的情况下,形成根向树等价于图中无环。所以我们后续只要利用
M' 证明当且仅当\det M'=0 图存在环即可。 -
考虑第二个因式,对于
M' ,其每行有两个非零值,其中起点处为 -1,终点处为 1。假设图中有环:-
\xrightarrow{e_2} \cdots \xrightarrow{e_{len-1}} x_{i} \xrightarrow{e_{len}} x_1 - 钦定
e_{len+1}=e_0 。由于对于每一个x_i ,M'_{e_{i-1},x_i}=-1 且M'_{e_{i},x_i}=1 。利用这个性质我们可以进行加减消元,消去x_i 对应的列,具体地,我们将代表e_i 的行向量取出,即M'[e_i,W] 。通过刚刚的讨论可以证明: -
\sum_i^{len} M'[e_i,W]=0 - 它的代数意义即为环对应的行向量线性相关,所以若有环,那么整个
M' 的行列式为 0。同样地,对于每一个行列式为 0 的矩阵我们都可以构造出其对应图中的环。
-
case 2
考虑证明第二个情况,即求出生成树情况下,
考虑如何对
- 根据 case 1 的证明,
M 中每行每列有且仅有一个 1。约定p=|W| ,我们对W 中的点随意从[p] 中标号。我们通过交换行,使得第i 列的 1 所在的行向量被交换至第i 行。交换完后,仅有M_{i,i}=1(i\in [p]) ,左下角和右上角的三角形被清空,显然\det M = \pm1 。 -
由于
M' 每个行向量有两个非零值,我们希望让所有非零值集中在右上方。我们根据拓扑排序对W 的点进行重新编号:- 显然对于一条边
u \to v ,v 的编号大于u 。 - 观察矩阵发现,由于每个点出度为 1,每列有且仅有一个位置为 1。
我们通过交换行,使得第
i 列的 1 所在的行向量被交换至第i 行。交换完后,仅有M'_{i,i}=1(i\in [p]) ,对于所有 -1 均在同一行的 1 的右边,所以所有 -1 均在右上角的三角形中,左下角被清零。注意到M 和M' 的对角线相同,显然\det M=\det M' 。 - 显然对于一条边
综上
2.2 Cauchy-Binet 定理
\det(AB)=\sum_S{\det A[[n],S]} \det B[S,[n]]
接下来将从转化,建模,讨论右式,讨论左式四步证明 Cauchy-Binet 定理:
2.2.1 证明 step1
考虑
对于一个
因为
约定 :
\sigma 表示一个排列(置换),\tau 描述该排列的奇偶性,即逆序对个数。
观察可以发现,每枚举一个
容易发现
我们不妨称
我们希望把奇偶性拆分到每一条路径上,我们定义某一
因为
那么有
通过这种方式我们将贡献拆到了每一种路径组中的每一条边上。
2.2.2 证明 step2
考虑对定理建模,我们可以构建有三列点的图,仅在一二列之间和二三列之间存在边。 第一列和第三列有
我们考虑将左边式子中的贡献拆到每一条路径,再将每条路径一分为 2,左侧由
2.2.3 证明 step3
将右式用分配律展开:
为了方便,我们将
当我们确定
考察每一个组合的图论意义。我们将两条路径拼接为一条,我们将位于
我们先考虑系数是否正确。考察
- 任意一个路径
g 若与l ,r 均产生交点(即和为偶数),那么就与e 无交点 - 任意一个路径
g 若与l ,r 产生 1 个交点(奇数),那么就与e 相交 - 若均无交点(偶数),那么就与
e 不相交。
我们将不同情况代入系数,容易证明:
带回原式,注意到可以以
注意到
2.2.4 证明 step4
考虑化简左式子,并将其与右式形成同构,通过对应关系证明:
注意到如果将
令
考察
对于每一个确定的
-
x \to z \to \sigma_x -
y \to z \to \sigma_y
对于每一个
-
x \to z \to \sigma_y -
y \to z \to \sigma_x
注意到我们相当于交换了
由此对于每一个
即
2.3 matrix-tree
根据思路我们需要计算有向图根向树的数量,其数量等于:
\det L^\mathrm{out}(G)[[n] \setminus k,[n] \setminus k]
为了方便书写,我们令
推式子:
完结撒花
3 更简短清晰显然的证明
3.0 约定
- 排列图 指对于一个长为
n 的排列a ,若p_i \ne i ,那么建边i \to p_i 形成的有向图。 - 置换环 指的序列图上的某一个强连通分量所在的子图,容易证明它是个简单多元环。我们钦定孤立的某点为一种 联通块,而非一元的置换环。置换环集合
p(\sigma) 表示\sigma 对应的序列图中所有置换环构成的集合。3.1 思路
与 常规证法 类似,我们只证明根向树情形下的矩阵树定理,其他情形均是该情形的特殊形式或是转化形式。 在本做法中,我们希望建立通过对排列图中的置换环进行容斥,从而证明行列式计算的是无环的序列图的个数,后者实际上就是生成树的个数。不过在此之前我们需要证明几个有关序列图和置换环的几个 Lemma。
3.2 Lemma
置换环有如下性质:
- 排列图中的联通块仅由孤立的单点和置换环构成;
- 排列,排列图,置换环三者任意两者一一对应;
- 置换环是简单多元环;
性质 1,2,3 显然,下面证明性质 4:
- 考虑交换任意两个数,容易发现每次交换一定会使排列的奇偶性发生改变,证明考虑分类讨论,交换
a_x ,a_y (x<y) 时任意一点对(x,z) 和(y,z) 的贡献。 - 考虑构造,使得对于任意(非顺序)情况,都存在一种仅交换两个数使联通块数量增加且仅增加 1 的操作。假设非顺序的排列图存在这样的路径:
-
- 即
a_x=y 且a_y=z ; - 考虑交换
a_x 和a_y ,此时a_x=z 而a_y=y ; - 显然此时增加且仅增加
{y} 这个联通块。
-
- 一直重复这样的操作最终使排序图不存在大于 1 的联通块,此时序列为顺序。显然
n-k 等于交换数,交换数的奇偶性等于逆序对的奇偶性。
3.3 matrix-tree
注意边权的含义,即
(u,v) 之间的连边方案,亦即(u,v) 之间的边数。我们需要证明的是 生成树计数 与
\det 式 相等。
考虑我们需要证明的用来计数的式子反应了什么
为了方便我们用
3.3.1 \det 式的贡献式
考虑
- 对于
i=\sigma_i ,那么i 可以选择任意 1 个出度并向它连边,贡献为可以选择的方案数。 - 对于
i\ne \sigma_i ,那么i 贡献在(i,\sigma_i) 之间连边的方案数。
据此,对于每一个
描述1:给你一张图,求子图的方案数,满足所有点出度为 1 且子图中包含所有给定的特定环。(环内的连接顺序给定,子图不一定需要联通)。
容易发现,第二类点产生的就是排列图中的置换环,同时第一类点选边时可能会产生新的环。如果我们令集合函数
描述2:给你一张图,求子图的方案数,满足所有点出度为 1 且子图中包含且仅包含所有给定的特定环。(环内的连接顺序给定,子图不一定需要联通)。
令集合
-
\forall T \nsubseteq U$,$g(T)=0 -
\forall p(\sigma) \nsubseteq U$,$\prod_{i=\sigma_i} D_{i,i}\prod_{i \ne \sigma_i} A_{i,\sigma_i}=0 - 对于非法的环集合,例如集合内的环存在包含关系,其方案数也为零。
以上几种情形的存在与否不影响贡献的计算,所以我们只讨论
3.3.2 生成树计数
注意到 3.3.1 结尾的式子是超集容斥的形式,又因为
容易证明:
- 当每个点出度为 1 时,图为森林当且仅当图中无环。
- 我们需要求的每个生成树都对应着去掉根后的一个森林。根的每个儿子是其所在联通块的根。
所以生成树计数等于所有点出度为 1 时无环的子图方案数,即为
将原证明的化简:
3.3.3 \det 式的系数式
由 Lemma 对逆序对的分析,我们不妨令:
- 排列图中的联通块数为
k ; - 排列长度为
n'(n'=n-1) ;
根据 Lemma 的结论:
- 此时孤立点数目为
k-|p(\sigma)| ; - 处于环中的点数为
n'-(k-|p(\sigma)|) ; -
发现,系数式第二项
于是我们证明 3.3.2 结尾的式子,完结撒花。