生成树计数——矩阵树定理学习小记

此篇博客没有证明(我太菜了),只有结论。

要证明见栋栋的博客 。

生成树计数,顾名思义,就是求生成树的方案数。

基尔霍夫矩阵:

定义度数矩阵D, D i , i = 点 i 的 度 D_{i,i}=点i的度 Di,i=i
再定义邻接矩阵C, C i , j = [ i 、 j 之 间 有 边 ] C_{i,j}=[i、j之间有边] Ci,j=[ij]
基 尔 霍 夫 矩 阵 = D − C 基尔霍夫矩阵=D-C =DC

行列式:

对于一个 n ∗ n n*n nn的矩阵 A A A,它的行列式=
∑ b 是 1 − n 的 排 列 ( − 1 ) b 的 逆 序 对 数 ∏ i = 1 n A i , b i \sum_{b是1-n的排列}(-1)^{b的逆序对数}\prod_{i=1}^n A_{i,b_i} b1n(1)bi=1nAi,bi

a a a的行列式记作 d e t ( a ) det(a) det(a) ∣ a ∣ |a| a

行列式的一些显然(并不)的性质:

1. ∣ A ∣ = ∣ A T ∣ |A|=|A^T| A=AT
显然。

2. ∣ A B ∣ = ∣ A ∣ ∗ ∣ B ∣ |AB|=|A|*|B| AB=AB
A ∗ B A*B AB的矩阵乘法中,相当于把A的第i行和B的第j行点积,等价于把A的第i行和 B T B^T BT的第j行点积,看一下行列式定义,可得:
∣ A B ∣ = ∣ A ∣ ∗ ∣ B T ∣ |AB|=|A|*|B^T| AB=ABT
又∵ ∣ B ∣ = ∣ B T ∣ |B|=|B^T| B=BT
∣ A B ∣ = ∣ A ∣ ∣ B ∣ |AB|=|A||B| AB=AB

推论:

1.交换的A的两行变成了B,则 ∣ A ∣ = − ∣ B ∣ |A|=-|B| A=B
交换两行逆序对个数就少了1,所以取负。

2.把A的一行乘上x变为B,显然有 x ∣ A ∣ = ∣ B ∣ x|A|=|B| xA=B

3.把A的一行乘上x加到另外一行上变为B,有 ∣ A ∣ = ∣ B ∣ |A|=|B| A=B
这个一行乘上x加到另外一行上,相当于乘上一个对角线上全是1,且不是对角线的某个位置为x,考虑这个转移矩阵的行列式,显然是1,根据之前的性质2,,就有 ∣ A ∣ = ∣ B ∣ |A|=|B| A=B

高斯消元求行列式:

前面讲了那么多的推论肯定都是用来消元的。

会高斯消元就很简单了,套上去即可。

矩阵树定理:

定义一个矩阵A的余子式 M i , j M_{i,j} Mi,j为A去掉第i行第j列的行列式。

那么一个图的基尔霍夫矩阵的任意余子式 M i , i M_{i,i} Mi,i就是生成树个数。


update 2019.4.30:
省选前复习发现这个还有一些拓展:
https://www.cnblogs.com/reverymoon/p/9512836.html#_lab1

1.大概就是如果边有边权x就可以视作有x条边。

2.有向图的外向和内向生成树计数只用改变度数矩阵。

外向的话就只有出边的权和,内向的话只有入边的权和。

你可能感兴趣的:(生成树计数——矩阵树定理学习小记)