Matrix-Tree定理学习小记(详细介绍+证明)
来源:互联网 发布:数据库处理查询的步骤 编辑:程序博客网 时间:2024/05/21 03:26
问题引入
基尔霍夫定理(基尔霍夫矩阵树定理)是用来解决这样一类问题:
给定一个
n 个点m 条边的无向图,求出这个图的生成树的总数。
前置技能
基础的线性代数知识:行列式及其基本性质,矩阵,方阵的行列式及其基本性质。
Matrix-Tree Theorem
一些约定
在一开始的讨论中,我们先规定这幅图没有重边和自环。在介绍完这个定理之后,我会对该定理在一般图上的推广做简略介绍。
我们用
拉普拉斯矩阵
首先我们要引入图的拉普拉斯矩阵(Laplacian matrix)的概念。
无向图的拉普拉斯矩阵其实就是图的度数矩阵减去邻接矩阵:
矩阵树定理
定理内容
根据矩阵树定理,无向图的生成树个数就等于这副图的拉普拉斯矩阵的任意一个代数余子式值。
定理证明
拉普拉斯矩阵的性质
首先给出拉普拉斯矩阵的两个性质:
- 定理1:拉普拉斯矩阵的任意一个代数余子式值都相同
- 证明:
- 首先可以发现,拉普拉斯矩阵的每一行、每一列的和都是
0 - 下面我们只证明同一行的两个代数余子式
Ci,j 和Ci,k 是相同的。只需要把这个证明在同一列上推广一下即可以得出定理1。 - 考虑对
Ci,j 做矩阵的初等变换得到Ci,k :首先我们把拉普拉斯矩阵第k 列在余子式所在列乘上一个−1 ,然后再把其它所有列乘上−1 加到这一列上。因为拉普拉斯矩阵的每一行的和都是0 ,可以发现,在经过上述过程之后,这一列就变成了拉普拉斯矩阵的第j 列。此时,矩阵的行列式要乘上一个−1 。 - 接下来我们做
|j−k−1| 次对换把这一列换到它在Ci,k 中的位置,此时行列式要乘上(−1)j−k−1 。 - 经过以上两个过程,行列式的值乘上了
(−1)j−k ,结合代数余子式的定义,我们还要乘上一个(−1)j−k 。也就是说,这两个代数余子式的值是相等的。
- 首先可以发现,拉普拉斯矩阵的每一行、每一列的和都是
- 定理2:拉普拉斯矩阵的行列式为
0 - 证明:两种思路
- 证明1:高斯消元的过程中,矩阵的每一行每一列的和依然为
0 。最后我们消成上三角矩阵,则右下角一定是0 ,因此行列式就是0 。 - 证明2:代数余子式有这样一个性质:
∑nj=1ai,jCi,j=det(ai,j) ,因为任意Ci,j 都相等,又由于∑nj=1ai,j=0 ,根据乘法分配律有det(ai,j)=0 。
- 证明1:高斯消元的过程中,矩阵的每一行每一列的和依然为
根据定理1,我们只需要证明
关联矩阵
对于一个
可以发现
柯西-比内公式
柯西-比内公式(Cauchy–Binet formula)是一条用在两个特定矩阵相乘上的恒等式。
假设
我们定义
柯西-比内公式给出了这样的结论:
具体证明十分复杂,如果有兴趣可以看看维基上的词条。
证明
有了上面所有的铺垫,我们终于可以证明矩阵树定理。
根据柯西-比内公式,我们有
可以发现,
首先证明不连通的情况,因为
这个怎么证明呢?我们交换行列把同属于一个连通块的点排在一起,这样,除去左上角的连通块,其余一个连通块都可以组成一个拉普拉斯矩阵。而这个矩阵的行列式就等于所有这些连通块矩阵的行列式之积,因为拉普拉斯矩阵行列式一定是
然后再证明树的情况。首先我们可以对这棵树的点和边都重标号,这样只会影响
考虑使用数学归纳法证明,最小规模的时候显然是成立的。然后考虑我们已经有一个大小为
至此,定理证明完毕!
推广
上面说了,我们对这个无向图做了一些人为的约定:不存在重边和自环。现在我们要把这个定理推广到一般的无向图上。
首先自环显然是不可能对答案产生影响的,我们把它们剔除。
然后对于重边,只需要把拉普拉斯矩阵中的
而且这个定理还能推广到有向图的生成树计数上面,只需要对拉普拉斯矩阵做这样的修改:
然后,该图以点
参考资料
维基百科
- Matrix-Tree定理学习小记(详细介绍+证明)
- 矩阵树定理(Matrix -Tree定理)
- CSU 1805 Tree Capitals(Matrix-Tree定理+Best定理)
- 生成树计数(Matrix-Tree定理)
- Matrix-Tree定理
- 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展
- 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展
- 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展
- 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展
- 生成树计数--矩阵树定理(Matrix-Tree定理)
- 【生成树计数】Matrix-tree定理学习笔记
- 生成树计数 matrix-tree定理学习笔记
- Matrix-Tree定理(2)----矩阵树定理
- lucas定理学习小记
- Hall定理学习小记
- 库默尔定理学习小记
- 最小生成树计数(Kruskal+Matrix-Tree定理)
- bzoj 1002 打表找规律(Matrix-tree 定理)+高精度
- Java Swing3-MyDialog的基本实现
- 原生JS实现省市区(县)三级联动选择
- 2017年上半年个人总结
- 计步器最多最小值自己输入(OC)
- C语言的内存分配malloc()和free()
- Matrix-Tree定理学习小记(详细介绍+证明)
- 51NOD 1255 字典序最小的子序列 【贪心】
- Python高级编程--迭代器
- 洛谷 P2055 假期的宿舍
- select标签使用
- 字符串
- CentOS源码编译更换gcc版本
- 疯狂的bLue(拓扑序+离散化)
- Java菜鸟成长之路__Day_1_Java概述及基础语法