老久没更了,冬令营也延期了(延期后岂不是志愿者得上学了?)

最近把之前欠了好久的债,诸如FFT和Matrix-Tree等的搞清楚了(啊我承认之前只会用,没有理解证明……),FFT老多人写,而MatrixTree没人证我就写一下吧……

Matrix Tree结论

Matrix Tree的结论网上可多,大概一条主要的就是,图中生成树的数量等于 \(V-E\) 的任一余子式,其中:

  • \(V\) 为对角阵,第 \(i\) 个元素为点 \(i\) 的度数
  • \(E\) 为对称阵,对角线为零且 \(E_{i,j}\) 为点 \(i\) 与点 \(j\) 之间边的数量的相反数

这个结论众人皆知,但我好像没怎么搜到证明?

图的关联矩阵

为了求无向图中有多少组 \(n-1\) 条边可以形成树,一般需要枚举所有的可能,无法在多项式内解决,但我们利用数学工具将其转换——引入关联矩阵

为了后面讨论我们给每条边随意分配一个方向。

图的邻接矩阵是一个 \(n\times n\) 的用于存储图的矩阵。而关联矩阵 \(A\) 则为 \(n\times m\) 的矩阵,其中行对应点,列对应边,如果 \(A_{i,j}\) 非零,则说明第 \(j\) 条边的起点或终点为点 \(i\)(如 \(i\) 为起点则为 \(+1\),终点则为 \(-1\),否则为 \(0\))。如下图即为一张 \(4\) 点 \(5\) 边的图的关联矩阵:
\[
\begin{bmatrix}
+1 & -1 & +1 & 0 & 0\\
-1 & 0 & 0 & +1 & -1\\
0 & +1 & 0 & -1 & 0\\
0 & 0 & -1 & 0 & +1
\end{bmatrix}
\]

可以看到,如果只考虑这张图的结构的话,关联矩阵的行之间或列之间随意交换都是无所谓的(行交换代表点重新编号……)


我们可以证明一个结论,任意连通图的关联矩阵秩为 \(n-1\)。

有两种理解方式:

  • 按行来看:

    • 首先去掉任意一行都是可以复原的:因为每一列都是一个 \(+1\) 一个 \(-1\),可以轻松由其他 \(n-1\) 行得到这一行。故去掉任意一行不会丢失信息,秩 \(\le n-1\);
    • 其次去掉任意两行都是无法复原的:因为任意去掉两行 \(x,y\),在这张连通图上找到一条 \(x\) 到 \(y\) 的路径,取其中 \(x\to y\) 方向第一条边 \(a\)、\(y\to x\) 方向第一条边 \(b\),则在还原关联矩阵时无法确定非零位置是 \((x,a)\&(y,b)\) 还是 \((x,b)\&(y,a)\)。故去掉任意两行都会丢失信息,秩 \(\ge n-1\)
  • 再按列来看更为显然:
    • 由于列对应边,故选取若干列,若这些列对应的边在图上组成了环,则一定线性相关(因为将环按一个方向捋一遍然后加起来一定为零)
    • 故要求“最多的线性无关的列”,也即求“在不出现环的前提下最多能找出多少边”,答案显然为 \(n-1\)

这下从行列两个方向证明了这个结论,但有何用处呢?

我们刚在从列的方向证明结论时用到了“生成树”的概念,仔细考虑一下,求“图中有多少种 \(n-1\) 条边的组合没有环”,等价于求“关联矩阵中有多少种 \(n-1\) 列的组合线性无关

同时我们证明了 \(n\) 个行中总有一个是多余的,故考虑删去其中一行对答案无影响。

这下将图中的问题转化为了矩阵中的问题,但是否将过程复杂化了呢?

Binet-Cauchy公式

为了解决这个问题,我们需要引入 Binet-Cauchy公式:

若存在 \(n\times m\) 的矩阵 \(A\) 与 \(m\times n\) 的矩阵 \(B\),则矩阵 \(AB\) 的行列式等于:从 \(m\) 中任意选取 \(n-1\) 个指标,并取出 \(A\) 的这 \(n\) 列得到 \(A'\),和 \(B\) 的这 \(n\) 行的得到 \(B'\),将它们行列式乘起来得到 \(\det A'\times \det B'\),对所有共 \(C_m^n\) 种选取情况求和。

数学表达:
\[
\det (AB)=\sum_{S\sube U,|S|=n}\det(A_S)\det(B_S)
\]
(其中 \(U\) 表示集合 \(\{1,2,\dots,m\}\),\(A_S\) 表示取出 \(S\) 中下标的列组成的矩阵,\(B_S\) 表示取出 \(S\) 中下标的行组成的矩阵)

可以发现其中几种特殊情况:

  • \(n=1\):此时公式等价于计算两个 \(m\) 维向量的点积
  • \(n=m\):此时公式等价于表示 \(\det(AB)=\det(A)\det(B)\) 的行列式可乘性质
  • \(n>m\):此时公式中由于无法选出任何一组,故右边恒等于 \(0\),其表达的其实是矩阵 \(AB\) 不满秩

这个公式的证明过于繁琐,不予展开,但可以感性理解:\(AB\) 是 \(A\) 的以 \(B\) 为系数的线性组合,将 \(AB\) 的行列式展开后分离贡献,\(\det (A_S)\) 的系数是 \(\det(B_S)\)

利用公式

为了解决这个问题引入这个公式,很明显是和其中的共同拥有的“任意选取”、“线性无关”两个因素有关。

很容易想到是想要将图的关联矩阵 \(D\)(去掉一行后)放入 \(A\) 或 \(B\) 的位置,但具体怎么放,另一个矩阵又是什么?

引理:连通图的关联矩阵中,任意一个子矩阵的行列式都为 \(\pm 1\) 或 \(0\)

证明:

  • 若子矩阵不可逆,则行列式自然为零
  • 若子矩阵可逆,则不可能每一列都同时存在两个非零项(否则每一列都是一个 \(+1\) 一个 \(-1\),将所有行加起来一定是 \(0\)),故按只有一个非零项的列进行行列式展开,则可以归纳至低一阶的情况

有了这个引理,可以非常自然的考虑将 \(A\) 设为 \(D\),\(B\) 设为 \(D^T\),则 \(A_S\) 和 \(B_S\) 都是取 \(D\) 的不同列向量组成的矩阵。

由于我们证明了,列线性无关的子矩阵行列式一定为 \(\pm 1\),则平方后一定为 \(1\)。再利用上述公式,故原问题的的答案即为 \(\det (AB)\)


至于 \(AB\) 是啥?\(AB=DD^T\)

考虑下关联矩阵 \(D\) 的定义,即可发现 \((AB)_{i,j}\):

  • 当 \(i=j\) 时:\((AB)_{i,i}\) 为 \(D\) 第 \(i\) 行与自己的点积,由于非零项都为 \(\pm 1\),则 \((AB)_{i,i}\) 即为第 \(i\) 行的非零项个数——即点 \(i\) 的度数
  • 当 \(i\ne j\) 时:\((AB)_{i,j}\) 为 \(D\) 第 \(i\) 行与 \(j\) 的点积,由于每一列都只有两个元素(一个 \(+1\) 一个 \(-1\)),故每个位置如果有值,则一定为 \(-1\),\((AB)_{i,j}\) 即为它们求和——点 \(i\) 与点 \(j\) 之间边的数量的相反数

总结

回顾整个过程:

  • 问题一开始是“有多少种选取 \(n-1\) 条边的方式,使选出的边构成树

  • 然后引入图的关联矩阵,证明了其秩为 \(n-1\),同时也发现问题等价于“有多少种在关联矩阵中选取 \(n-1\) 列的方式,使选出的列线性无关”(同时发现删去关联矩阵任意一行对答案无影响)
  • 针对“任意选取”和“线性无关”两个特点,引入了同样拥有这两个特点的 Binet-Cauchy公式
    • 利用 Binet-Cauchy任意选取的特点,和“线性无关\(\iff\) 行列式非零”的性质,希望将关联矩阵放入公式
  • 为了将关联矩阵放入公式,证明了关联矩阵中任意一个子矩阵行列式为 \(\pm 1\) 或 \(0\)
  • 巧妙地将 \(A\) 设为 \(D\),\(B\) 设为 \(D^T\),则得到的结果 \(\det(AB)\)
    • 等价于:任取 \(D\) 的 \(n-1\) 列求出行列式,平方后求和。
    • 等价于:任取 \(D\) 的 \(n-1\) 列,行列式非零的方案数
  • 考虑 \(AB=DD^T\) 的现实意义,得到开头提到的Matrix Tree定理

有向生成树的扩展

刚才讨论的都是无向生成树,可以考虑到有向生成树的情况:

  • 由于点可以重新标号,我们只考虑以 \(1\) 号点为根的情况
  • 由于内向生成树可以将边取反后求外向生成树,故只考虑外向生成树的情况

考虑外向生成树关联矩阵的特点:除了根以外每一行都只有一个 \(-1\)(树上只有一个父亲)

而若生成树不是外向生成树,则一定存在一个点 \(x\),关联矩阵中 \(x\) 对应的那一行没有 \(-1\)

所以可以考虑将原来每条边“一个 \(+1\) 一个 \(-1\)”中的 \(+1\) 置为零,则在计算时:

  • 如果这棵生成树不是外向生成树,则一定存在一行全为零,其行列式也为零
  • 如果这棵树是外向生成树,由于每一行有一个 \(-1\),故其行列式为 \((-1)^{n-1}\) 也只可能为 \(\pm 1\)

数学-Matrix Tree定理证明的更多相关文章

  1. 【证明与推广与背诵】Matrix Tree定理和一些推广

    [背诵手记]Matrix Tree定理和一些推广 结论 对于一个无向图\(G=(V,E)\),暂时钦定他是简单图,定义以下矩阵: (入)度数矩阵\(D\),其中\(D_{ii}=deg_i\).其他= ...

  2. [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  3. @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列

    目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...

  4. BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)

    题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...

  5. SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)

    题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...

  6. [自用]数论和组合计数类数学相关(定理&证明&板子)

    0 写在前面 本文受 NaVi_Awson 的启发,甚至一些地方直接引用,在此说明. 1 数论 1.0 gcd 1.0.0 gcd $gcd(a,b) = gcd(b,a\;mod\;b)$ 证明:设 ...

  7. [自用]多项式类数学相关(定理&证明&板子)

    写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...

  8. [总结]数论和组合计数类数学相关(定理&证明&板子)

    0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...

  9. [总结]多项式类数学相关(定理&证明&板子)

    目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...

随机推荐

  1. perf4j+logback配置 非spring 可使用注解

    最近项目打算使用perf4j进行性能监控,由于项目没有使用spring,而又不想对代码入侵过高,打算使用注解的方式进行接入.perf4j采用AspectJ库实现AOP. 具体接入方法如下: logba ...

  2. javaweb_forQuery

    http://how2j.cn/k/tmall_ssm/tmall_ssm-1516/1516.html 总体思路 使用springMVC+spring+mybatis的方式打通表现层/业务层/持久层 ...

  3. verilog乘法器的设计

    在verilog编程中,常数与寄存器变量的乘法综合出来的电路不同于寄存器变量乘以寄存器变量的综合电路.知乎里的解释非常好https://www.zhihu.com/question/45554104, ...

  4. TortoiseSVN配置和使用教程

    2009-04-24 来源:dev.idv.tw 1 安装及下载client 端 2 什么是SVN(Subversion)? 3 为甚么要用SVN? 4 怎么样在Windows下面建立SVN Repo ...

  5. 吴裕雄--天生自然 R语言开发学习:回归(续四)

    #------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...

  6. Uber自动驾驶卡车正式运营,是否会给卡车司机彻底“宣判死刑”?

    随着科技的快速迭进和嬗变,大众的生活也在被全面革新和改变.不过有些改变是显性的,比如PC和智能手机的出现.有些改变却是隐性的,比如太空科技.云计算等.而在当下,又一个看似与大众生活紧密相关,但一般人却 ...

  7. Train Problem II (卡特兰数+大数问题)

    卡特兰数: Catalan数 原理: 令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) ...

  8. 漫说测试 | 研发虐我千百遍,我待bug如初恋

    的行业之一他们的运筹帷幄,他们的勾心斗角,只有自己知道.000,但绝对也是最枯燥的行业之一! IT可能是几个最高薪行业之一,但同时也绝对是最辛苦的行业之一!IT业是最需要创新能力的行业之一,但绝对也是 ...

  9. rest-framework源码解析和自定义组件----版本

    版本 url中通过GET传参自定义的版本 12345678910111213141516171819202122 from django.http import HttpResponsefrom dj ...

  10. array-2

    数组的基本操作 JS随机操作数组元素 Math.random() 结果为0-1间的一个随机数[0,1) Math.round(num) 参数num为一个数值,函数结果为num四舍五入的整数 Math. ...