Matrix-Tree定理学习小记(详细介绍+证明)

来源:互联网 发布:数据库处理查询的步骤 编辑:程序博客网 时间:2024/05/21 03:26

问题引入

基尔霍夫定理(基尔霍夫矩阵树定理)是用来解决这样一类问题:

给定一个n个点m条边的无向图,求出这个图的生成树的总数。


前置技能

基础的线性代数知识:行列式及其基本性质,矩阵,方阵的行列式及其基本性质。


Matrix-Tree Theorem

一些约定

在一开始的讨论中,我们先规定这幅图没有重边和自环。在介绍完这个定理之后,我会对该定理在一般图上的推广做简略介绍。
我们用ai,j表示矩阵的一个元素,Mi,j表示矩阵的一个余子式,Ci,j表示矩阵的一个代数余子式。

拉普拉斯矩阵

首先我们要引入图的拉普拉斯矩阵(Laplacian matrix)的概念。
无向图的拉普拉斯矩阵其实就是图的度数矩阵减去邻接矩阵:

Li,j=deg(vi),1,0,if i=jif ij and vi is adjacent to vjotherwise

矩阵树定理

定理内容

根据矩阵树定理,无向图的生成树个数就等于这副图的拉普拉斯矩阵的任意一个代数余子式值。

定理证明

拉普拉斯矩阵的性质

首先给出拉普拉斯矩阵的两个性质:

  • 定理1:拉普拉斯矩阵的任意一个代数余子式值都相同
  • 证明:
    • 首先可以发现,拉普拉斯矩阵的每一行、每一列的和都是0
    • 下面我们只证明同一行的两个代数余子式Ci,jCi,k是相同的。只需要把这个证明在同一列上推广一下即可以得出定理1。
    • 考虑对Ci,j做矩阵的初等变换得到Ci,k:首先我们把拉普拉斯矩阵第k列在余子式所在列乘上一个1,然后再把其它所有列乘上1加到这一列上。因为拉普拉斯矩阵的每一行的和都是0,可以发现,在经过上述过程之后,这一列就变成了拉普拉斯矩阵的第j列。此时,矩阵的行列式要乘上一个1
    • 接下来我们做|jk1|次对换把这一列换到它在Ci,k中的位置,此时行列式要乘上(1)jk1
    • 经过以上两个过程,行列式的值乘上了(1)jk,结合代数余子式的定义,我们还要乘上一个(1)jk。也就是说,这两个代数余子式的值是相等的。
  • 定理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,我们只需要证明C1,1是图的生成树个数就好了。

关联矩阵

对于一个n个点,m条边的无向图,它的关联矩阵(Incidence matrix)为一个n×m的矩阵。这个矩阵定义如下:

Bi,j=1,1,0,(i,j) is the kth edge of the graph and i<j(i,j) is the kth edge of the graph and i>jotherwise

可以发现L=BBT。令F矩阵为B矩阵去掉第一行得到的矩阵,显然FFT就是L矩阵去掉第一行第一列之后得到的矩阵。

柯西-比内公式

柯西-比内公式(Cauchy–Binet formula)是一条用在两个特定矩阵相乘上的恒等式。
假设A是一个n×m的矩阵,B是一个m×n的矩阵,它们的乘积显然是一个n×n的矩阵。
我们定义[m]是集合{1,...,m}([m]n)表示[m]的所有大小为n的子集组成的集合。对于S([m]n),我们定义A[n],S为一个n×n的矩阵,其由矩阵A保留S中的列得到。同理,BS,[n]也是一个人n×n的矩阵,其由矩阵B保留S中的行得到。
柯西-比内公式给出了这样的结论:

det(AB)=S([m]n)det(A[n],S)det(BS,[n])

具体证明十分复杂,如果有兴趣可以看看维基上的词条。

证明

有了上面所有的铺垫,我们终于可以证明矩阵树定理。
根据柯西-比内公式,我们有

Ci,j=S([m]n1)det(F[n1],S)det(FTS,[n1])=S([m]n1)det(F[n],S)2

可以发现,S实际上选择了图中的n1条边,这里就是在枚举所有选出n1条边的方案。现在我们只需要证明:S集合的边组成的图不连通时,det(F[n],S)0,否则(一定是一棵树)一定是11
首先证明不连通的情况,因为F[n1],SFTS,[n1]实际上就是S中的边组成的图的拉普拉斯矩阵除去第一行第一列得到的矩阵,我们只需要证明当图不连通时,这个矩阵行列式是0即可。
这个怎么证明呢?我们交换行列把同属于一个连通块的点排在一起,这样,除去左上角的连通块,其余一个连通块都可以组成一个拉普拉斯矩阵。而这个矩阵的行列式就等于所有这些连通块矩阵的行列式之积,因为拉普拉斯矩阵行列式一定是0,因此这个矩阵的行列式就是0
然后再证明树的情况。首先我们可以对这棵树的点和边都重标号,这样只会影响F[n],S行列式的符号。怎么重标号呢?你可以理解为从1号节点对这棵树进行dfs,然后每一个点的新编号就是它的DFS序减一(因为1号点所在行被删掉了,不会出现在F里面),边的话就按照遍历的先后来编号。
考虑使用数学归纳法证明,最小规模的时候显然是成立的。然后考虑我们已经有一个大小为n1×n1的矩阵F。接下来我们加入编号为n的点和编号为n的边,这样会使得F′′n,n和一个F′′i,n(i<n)变成1。根据代数余子式的性质,因为F′′的第n行出了F′′n,n都是0,因此det(F′′)就等于F′′n,n乘上n1阶的F的行列式,也就是说行列式的值不变。

至此,定理证明完毕!

推广

上面说了,我们对这个无向图做了一些人为的约定:不存在重边和自环。现在我们要把这个定理推广到一般的无向图上。
首先自环显然是不可能对答案产生影响的,我们把它们剔除。
然后对于重边,只需要把拉普拉斯矩阵中的1推广成两点之间边数的相反数、度数记上重边的就好了。
而且这个定理还能推广到有向图的生成树计数上面,只需要对拉普拉斯矩阵做这样的修改:
 对于ijLi,j是从ij的有向边条数的相反数
 对于任意iLi,i表示点i除去自环之后的入度
然后,该图以点i为根的生成树个数就是Mi,i


参考资料

维基百科

原创粉丝点击