【学习笔记】矩阵树定理
本人数学很菜,建议少看为妙。
1.1 1.1 1.1 关联矩阵 M M M:表示图的矩阵,第 i i i列表示第 i i i条边。如果第 i i i条边的起点是 u u u,那么 M u , i = 1 M_{u,i}=1 Mu,i=1;如果第 i i i条边的终点是 u u u,那么 M u , i = − 1 M_{u,i}=-1 Mu,i=−1,否则 M u , i = 0 M_{u,i}=0 Mu,i=0。
注意到这个矩阵的列和都是 0 0 0,所以只要知道 n − 1 n-1 n−1行,就能知道另外一行。因此删去某一行后剩下的矩阵的秩不变。
1.2 1.2 1.2 定理:对于一个无向连通图, rank ( M ) = n − 1 \text{rank}(M)=n-1 rank(M)=n−1。
这个还是比较容易看的。从列来看的话,将 n − 1 n-1 n−1条边作为基底,那么任意一条 s → t s\to t s→t的路径都可以用若干边拼出来;从行来看的话,相当于任取 n − 1 n-1 n−1个行向量,必定线性相关,可以反证法得到不连通的结论。
显然对于任意一个无向图,有 r a n k ( M ) = n − m rank(M)=n-m rank(M)=n−m,其中 m m m表示连通块数目。
1.3 1.3 1.3 定理:如果一个无向连通图 G G G,有 n − 1 n-1 n−1条边能形成原图当且仅当从 M ′ M' M′种选出这些列拼成一个 n − 1 n-1 n−1行 n − 1 n-1 n−1列的矩阵 A A A, ∣ A ∣ ≠ 0 |A|\ne 0 ∣A∣=0。其中 M ′ M' M′是删掉其中一行后的矩阵。
这个怎么看呢,相当于这 n × ( n − 1 ) n\times (n-1) n×(n−1)的矩阵的 rank = n − 1 \text{rank}=n-1 rank=n−1时这个图是联通的(因为有 n − 1 n-1 n−1条边所以恰好是一颗生成树),又因为删除一行后秩不变,所以等价于这 ( n − 1 ) × ( n − 1 ) (n-1)\times (n-1) (n−1)×(n−1)的矩阵满秩,即 ∣ A ∣ ≠ 0 |A|\ne 0 ∣A∣=0。
1.4 1.4 1.4 若 ∣ A ∣ ≠ 0 |A|\ne 0 ∣A∣=0,那么 ∣ A ∣ = ± 1 |A|=\pm1 ∣A∣=±1 。
可以考虑把删掉的那一行看成根节点,然后把行按拓扑序排序(叶节点排在前面),同时让拓扑序排第 i i i行的点对应的那条边排在第 i i i列,那么构成了一个对角线全为 ± 1 \pm1 ±1的上三角矩阵,因此 ∣ A ∣ = ± 1 |A|=\pm 1 ∣A∣=±1。
1.5 1.5 1.5 定义无向图的邻接矩阵 G G G, G i , j G_{i,j} Gi,j表示 i i i到 j j j的边的权重/条数,且有 G i , j = G j , i G_{i,j}=G_{j,i} Gi,j=Gj,i 。定义无向图的拉普拉斯矩阵 L L L, L = D − G L=D-G L=D−G,其中 D D D是由每个点的度数组成的一个对角矩阵。
1.6 1.6 1.6 定理:对于一个无向图, M M T = L MM^T=L MMT=L
暴力展开即可。
1.7 1.7 1.7 定理:无向连通图生成树的个数等于 L L L的任意一个 n − 1 n-1 n−1阶主子式的行列式。
可以把按 ( i , i ) (i,i) (i,i)展开的余子式看成是将 i i i节点从图中删去,那么此时的 M M M应该是将第 i i i行删去,利用 binet-cauthy \text{binet-cauthy} binet-cauthy定理将 M ′ M ′ T M'M'^T M′M′T展开就相当于从中选 n − 1 n-1 n−1条边求矩阵行列式的平方,如果是一颗生成树那么算出来是 1 1 1否则是 0 0 0,求和就是生成树的个数。
计算行列式复杂度为 O ( n 3 ) O(n^3) O(n3)。
推广1:树形图计数
考虑内向树的情形。
此时的关联矩阵 N N N为:如果第 i i i条边的起点是 u u u,那么 N u , i = 1 N_{u,i}=1 Nu,i=1,否则 N u , i = 0 N_{u,i}=0 Nu,i=0。
此时删掉第 i i i行相当于求以 i i i为内向树根的生成树个数,套路类似的按拓扑序排序后依然能得到对角线全为 1 1 1的结论,因此直接给出结论: L = M N T = D − G L=MN^T=D-G L=MNT=D−G,其中 D D D是每个点出度组成的一个对角矩阵, G i , j G_{i,j} Gi,j表示 i i i到 j j j的有向边数目。以 i i i为根的内向生成树的数目为将 L L L的第 i i i行第 i i i列删除后的行列式。
推广2: B E S T BEST BEST定理
定义两条欧拉回路不同当且仅当经过边的顺序不同,那么对于有向图 G G G,记 d s d_s ds表示从 s s s出发的出边数目, T s T_s Ts表示以 s s s为根的内向树数目,那么以 s s s为起点的欧拉回路数目为:
F ( s ) = T s d s ! ∏ u ≠ s ( d u − 1 ) ! F(s)=T_sd_s!\prod_{u\ne s}(d_u-1)! F(s)=Tsds!u=s∏(du−1)!
怎么来看呢,其实可以把欧拉回路看成 d f s dfs dfs的过程,那么遍历完子树后自然会走回父节点,可以看出如果我们把除 s s s外的节点的出边任意排序的话,那么树边一定是最后遍历的那一条。并且以 u u u节点来看,无论过程中怎么走,最后一步都会退回到父亲节点,类比 d f s dfs dfs的过程,我们知道最终一定会在 s s s节点处停下来。
这么说的组合意义确实太抽象了,但是我也不知道纯数学是怎么推的啊?
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530076.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2021-12-10 关于自己犯过的错误
2021-12-10 【题解】[CQOI2017] 老C的方块