Matrix-Tree 定理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matrix-Tree 定理相关的知识,希望对你有一定的参考价值。

  首先推荐 GJS学长 的这篇博文: http://www.cnblogs.com/meowww/p/6485422.html .

 

Matrix-Tree 定理

  度数矩阵 $D$ . $D_{i, i} = i 的度数$ .

  邻接矩阵 $G$ . $G_{i, j}$ 表示 $i$ 到 $j$ 的连边数量.

  基尔霍夫矩阵 $K$ , $K = D - G$ .

 

  边矩阵 $B[m \\times n]$ , 每行代表一条边, 对应位置的值为 $1$ .

  $B ^ T B = K$ .

  $B_i ^ T B_i = K_i$ .

  其中 $B_i$ 是 $B$ 去掉第 $i$ 行第 $i$ 列的代数余子式, $K_i$ 同理.

  说明  每行可以贡献在 4 个基尔霍夫矩阵的对应位置.

 

  Matrix-Tree 定理:

    $原图的生成树个数 = |K_i|$ .

  一般我们在计算的时候, 去掉最后一行最后一列, 然后用高斯消元的方法在 $O(n ^ 3)$ 求解.

 

  基尔霍夫矩阵有一定的小性质.

  1. $|K| = 0$ .

  证明  把所有都加到第一行.

  2. 若图不连通, $|K_i| = 0$ .

  证明  通过两次交换可以交换编号.

      利用该原理进行重编号.

      将矩阵分快, 一定有一个联通块是完整的基尔霍夫矩阵.

  3. 若该图是一棵树, 那么 $|K_i| = 1$ .

  证明  归纳法, 边界显然成立.

      交换编号, 使得一个度数为 1 的节点放在最后一位, 加上去, 然后按最后一列展开, 根据归纳假设得证.

 

常规证明

  根据 Cauchy-Binet 公式 ( 描述了行列式的值与矩阵乘法的关系 ) , $|K_i| = |B_i ^ T B_i| = \\sum |选择 n-1 条边组成的基尔霍夫矩阵的余子式|$ .

  注意到对于 n-1 条边, 图要么不连通, 要么是一棵树.

  所以 $K_i = 生成树个数$ .

 

另一种证明

  去除掉第一行第一列, 那么剩余的矩阵类似一个除去了点 1 的基尔霍夫矩阵, 除了主对角线的每个与点 1 连通的位置有一个 $\\Delta$ .

  考虑按照线性性质展开, 通过交换编号同理可说明, 最后所有与点 1 连通的位置会剩下 $\\Delta$ , 其他位置没有影响.

  我们可以按照所有 $\\Delta$ 展开, 得到了 $\\Delta$ 的乘积 * 若干个不连通的块的基尔霍夫矩阵的余子式.

  根据归纳假设, 得证.

  这种方法从本质上把指数级别的暴力融入了行列式中, 类似的思想还有 Lindstorm - Gessel - Viennot 引理.

 

推广

  推广1 计算边权的乘积之和.

    如果边权都是整数, Matrix-Tree定理支持带有重边的图, 我们把每条边权 w 当做 w 条边, 然后跑 Matrix-Tree 即可.

    如果边权是有理数, 设 $t$ 为边权的最小公倍数, 我们给每个值乘上 $t$ , 然后再外界除以 $t ^ n$ , 再把 $t ^ n$ 扔进去, 就证明了 Matrix-Tree 定理对所有有理数都成立.

  推广2 有向图生成树计数

    基尔霍夫矩阵不再对称, 但仍然使用.

以上是关于Matrix-Tree 定理的主要内容,如果未能解决你的问题,请参考以下文章

Matrix-Tree 定理

学习笔记矩阵树定理(Matrix-Tree)

Matrix-Tree 定理(基尔霍夫矩阵树定理)

Matrix-Tree 定理(基尔霍夫矩阵树定理)

spoj 104 Highways(Matrix-tree定理)

康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展