码迷,mamicode.com
首页 > 其他好文 > 详细

Matrix-Tree 定理

时间:2017-09-12 10:01:36      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:矩阵   方法   www.   auc   原理   orm   节点   www   个数   

  首先推荐 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 定理

标签:矩阵   方法   www.   auc   原理   orm   节点   www   个数   

原文地址:http://www.cnblogs.com/Sdchr/p/7508234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!