矩阵树定理及其证明
PeppaPig_qwq · · 算法·理论
最近发现自己忘了矩阵树定理是怎么证的了,所以来补一发。
假设我们有一个无向连通图
- 度数矩阵
D :D_{ii} 表示顶点i 的度数,其余不在对角线上的元素全为 0。 - 邻接矩阵
A :若顶点i 和j 之间有边,则A_{ij} = 1 。若无边,则A_{ij} = 0 。 - 拉普拉斯矩阵
L :定义为L = D - A 。
矩阵树定理就是说图
人话:随意选一个
定理的证明:
先给每一条边随意指定一个方向。
接着,定义一个
- 如果边
e 终点是v ,则B_{ve} = 1 。 - 如果边
e 的起点v ,则B_{ve} = -1 。 - 如果边
e 与顶点v 不相连,则B_{ve} = 0 。
注意到,将
证明:对于对角线上的元素
然后有一个定理叫柯西-宾纳定理。对于
这里的
前置的定理说完了,可以开始讲证明了。
根据矩阵树定理,我们要计算删掉
现在,对
由于转置矩阵的行列式不变,即
这个公式的含义就是选出任意
从图
-
这
n-1 条边包含环如果
S 中有环,那么环上的边对应的列向量在矩阵中是线性相关的。我们只要顺着环的方向赋予系数1 ,逆着环的方向赋予系数-1 ,这些列向量的线性组合就恰好为全0 向量。知周所众列向量线性相关的方阵,其行列式为 0。也就是[\det((B_i)_S)]^2 = 0 -
这
n-1 条边不包含环(即恰好构成一棵生成树)如果
S 是一棵树,由于树有n 个节点和n-1 条边,它必然至少包含两个度数为 1 的叶子节点。 所以除去被我们提前删掉的节点i 外,子矩阵(B_i)_S 内一定还能找到至少一个叶子节点v 。观察矩阵中节点
v 对应的那一行。因为它是叶子节点,只连接了一条边,所以这一行只有一个非零元素(必然是1 或-1 )。我们按这一行对行列式进行拉普拉斯展开。有
\det = (\pm 1) \times \det(\text{子余式}) 。展开后,相当于我们在图中砍掉了这个叶子。剩下的结构仍然是一棵树。不断重复肘击叶子的过程,直到矩阵缩小至
1 \times 1 ,每次提出来的系数都是\pm 1 。因此,连续相乘的结果必定是\pm 1 。所以它的平方为:[\det((B_i)_S)]^2 = 1
现在,我们将刚刚的结论代回前面的求和公式中:
在这个求和式中,凡是不能构成生成树的边集
把它们全加起来的结果正好就是图
至此,矩阵树定理证明完毕。