【证明与推广与背诵】Matrix Tree定理和一些推广
【背诵手记】Matrix Tree定理和一些推广
结论
对于一个无向图\(G=(V,E)\),暂时钦定他是简单图,定义以下矩阵:
- (入)度数矩阵\(D\),其中\(D_{ii}=deg_i\)。其他=0
- 邻接矩阵\(A\),其中\(A_{ij}=[\exist e=(i,j)]\)。其他=0 (*******wait!*******)
- 关联矩阵\(B\),其中\(B_{ij}=[\exist e_i=(a,b)](-1)^{[a>b]}\)。其他=0(后面会用到)
- 拉普拉斯矩阵\(L=D-A\)

那么,这个图的生成树个数是\(L\)矩阵的任意一个n-1阶主子式的绝对值。
证明
关于拉普拉斯矩阵的性质
拉普拉斯矩阵所有的代数余子式值相同
证明:
一个显然的事实是拉普拉斯矩阵任何一行/列的元素和\(=0\)
我将证明一行内代数余子式\(R_{ij}=R_{ik}\)
先只看对应位置的余子式,可以发现他们的不同在于一个有第\(j\)列没有第\(k\)列,另一个相反。
根据之前发现的简单的事实\(L_{ik}+L_{ij}+\text{others}=0\) 。我们对于\(C'_{ik}\),其他列直接乘\(-1\)加到第\(k\)列对应列,此时第\(k\)列对应列就变成了 \(C_{ij}\)的第一列。
然后考虑把这两个余子式特殊的那一列(j,k),列交换(用冒泡排序的方法,因为我们不能破坏其他列的相对关系)到第一列,每次交换是要乘上一个-1的,所以最终交换完成后,有一个类似\((-1)^{?}\)的系数。此时除了符号,两个行列式相等了。
两个余子式都要乘上\((-1)^{?}\),而这里的系数正好就可以对应上代数余子式需要乘上的\((-1)^{i+j}\)。
行内检验无异,列就自然成立,稍微推广QED,由上可知
自闭证毕拉普拉斯矩阵的行列式的值\(=0\)
根据行列式按_展开法则证明显然
记\(R=R_{11}\),来证明它一些性质
\(|R|=0\)时当且仅当这个图不连通
证明:
通过交换行列将联通块排在一起,此时的行列式的值是原来的\((-1)^?\)倍,此时整个矩阵变成了这样:
\[
L=\begin{pmatrix}
L_1 &O&...\\
O&L_2&...\\
...&...&...
\end{pmatrix}
\]
根据拉普拉斯矩阵性质\(|L_i|=0\)以及R的定义可知\(|R|=0\)。\(||R||=1\)当且仅当\(G\)是一棵树
证明:
我暂时不会循环证明:
显然一棵树的生成树只有一颗
重要补充:
\[
B^TB=L
\]
显然,\(B^TB\)相当于\(B\)中选两列\(e_i,e_j\)列向量然后一个转置后再乘起来,可以验证\(L_{ij}=e_i^Te_j\)。
重要补充:
柯西-比内公式(CB)
对于矩阵\(A[n][m]\)和\(B[m][n]\)有:
\[
\det(AB)=\sum_{|S|=n,S\subseteq\{1\dots m\}}\det\left(A_{\{1...n\},S}\right)\det\left(B_{S,\{1...n\}}\right)
\]
证明
看起来组合意义很强...
这一步好像是理解Matrix Tree本质/性质/拓展性 的关键一步,可惜我看不懂....
回到正题= =
我们把\(B\)的第一列剔除,显然\(R=B'^TB'\) ,套公式有
\[
|R|=\sum_{|S|=n-1,S\subseteq\{1\dots m\}}\det\left(B'^T_{\{1...n-1\},S}\right)\det\left(B'_{S,\{1...n-1\}}\right)
\]
激动人心的时刻到了,根据矩阵转置的性质可以发现
\[
|R|=\sum_{|S|=n-1,S\subseteq\{1\dots m\}}\det\left(B'_{S,\{1...n-1\}}\right)^2
\]
好诱人的组合意义啊。不过我们做一点准备工作,搞个记号\(N=\{1...n-1\}\)。
\(\det(B'_{S,N})^2 \in \{0,1\}\)
可以发现的是,根据\(B'^T_{S,N}B'_{N,S}=R\),当且仅当选出的边不连通时,可以知道\(\det (B'^T_{S,N})=\det(B'_{N,S})=0\)。
现在要证明选出的边联通时,\(||B'_{N,S}||=1\)。此时由于\(|S|=n-1\)那么一定是一颗树。
口胡警告
观察\(B'_{N,S}\)这个矩阵的形式,
应该是由初等基本变换变换出来的,然后我们又有\(B'^T_{S,N}B'_{N,S}=R,||R||=1\),基本初等变换得到的矩阵相乘仍然可以看做基本初等变换,由于基本初等变化不会影响行列式的值,就有那么\(||B'_{N,S}||=1\) 。
现在回过头来考虑CB公式的算法,它相当于在\(O({m\choose n-1})\)时间内枚举每一个边集,然后判断是否联通,若联通就\(+1\)的贡献。显然最终累和的值就是生成树的个数。
也就是说|R|就等于这个图的生成树个数。
R是一个行列式,算行列式自然有好算的办法
啦啦啦终于证完了
下面的推广可能完全是假的。
推广
根据行列式的\(O(n!)\)的式子,可以知道\(|R|\)的值是关于\(|R_{ij}|\)的基本初等函数(加减乘除)。根据上面的推导,我们发现\(|R|\)是一堆\(1,-1\)的乘积的和。上面的推导中,不存在除法,虽然存在乘法但是是简单的取相反数运算。(注意,有平方运算!)我们如果将邻接矩阵的01换成边的边权\(w\),那么\(|R|\)就等于所有生成树的边权积(注意,边权\(\in R^+\))的和。
因为行列式本质上是只是一个多元函数\(F(\{\})=\sum \prod (-1)^{?}...\),我们甚至令w=一个生成函数甚至边权!!1...(毒瘤警告)
实际上我们计的数是,在\(m\)个三元组\((i,j,w)\)中选择\(n-1\)个出来,并且保证\((i,j)\)构成一棵树。我们求的是所有满足树条件的每棵树的\(\prod w\) 的和。
口胡警告
更抽象地讲,任何和域\(<R,+,\times>\)有着相同的代数结构的域\(<C,\and,*>\)都满足这个定理,可以得到\(|R|=\and *w\)。
注意到不论我们带什么进去都是好实现的,因为求行列式有\(O(n^3)\)的算法,而且...
这就触及到我的知识盲区了,理性证明等我大学看能不能学会,但是现在可以拍脑袋地讲,假如你有可以对应到加(减)乘(除)的运算法则的元素,那么你带进去没错。这是很对的。
所以:
- 假如让边权\(w\)等于这条边重边数量(度数也要相应更新),那么\(|R|\)就等于考虑重边生成树个数。
- 有向图的生成树的话,\(D\)就要钦定是入/出度矩阵,\(A\)就要钦定是\(A_{i,j/j,i}=cnt[e<i,j>]\),得到的\(|R_{ii}|\)是以\(i\)为根的内向树/外向树个数。正确性如果通过上面的证明理解的话貌似是完全错误的,因为就拉普拉斯矩阵的第一个性质就不满足...可能有别的构造出的组合意义?
至此,熟练背诵的Matrix Tree定理就出来了....
【证明与推广与背诵】Matrix Tree定理和一些推广的更多相关文章
- 数学-Matrix Tree定理证明
老久没更了,冬令营也延期了(延期后岂不是志愿者得上学了?) 最近把之前欠了好久的债,诸如FFT和Matrix-Tree等的搞清楚了(啊我承认之前只会用,没有理解证明--),FFT老多人写,而Matri ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)
题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...
- HDU 4305 Lightning Matrix Tree定理
题目链接:https://vjudge.net/problem/HDU-4305 解法:首先是根据两点的距离不大于R,而且中间没有点建立一个图.之后就是求生成树计数了. Matrix-Tree定理(K ...
- BZOJ.4894.天赋(Matrix Tree定理 辗转相除)
题目链接 有向图生成树个数.矩阵树定理,复习下. 和无向图不同的是,度数矩阵改为入度矩阵/出度矩阵,分别对应外向树/内向树. 删掉第i行第i列表示以i为根节点的生成树个数,所以必须删掉第1行第1列. ...
- BZOJ.1016.[JSOI2008]最小生成树计数(Matrix Tree定理 Kruskal)
题目链接 最小生成树有两个性质: 1.在不同的MST中某种权值的边出现的次数是一定的. 2.在不同的MST中,连接完某种权值的边后,形成的连通块的状态是一样的. \(Solution1\) 由这两个性 ...
- [模板]Matrix Tree定理
结论:一个图的生成树个数等于它的度数矩阵减邻接矩阵得到的矩阵(基尔霍夫矩阵)的任意一个n-1阶主子式的行列式的绝对值 证明:不会 求法:高斯消元 例题:[HEOI2013]小Z的房间 #include ...
随机推荐
- qt 在ui界面添加控件后在cpp文件中无法调用?
问题:qt 在ui界面添加控件后在cpp文件中无法调用? 解决方法:在build选项中选择“重新build项目”,再次在cpp中调用添加的控件发现可以调用了. 还有一种情况导致添加控件后无法调用,就是 ...
- lattice planner 规划详解
大家好,我是来自百度智能驾驶事业群的许珂诚.今天很高兴能给大家分享Apollo 3.0新发布的Lattice规划算法. Lattice算法隶属于规划模块.规划模块以预测模块.routing模块.高精地 ...
- 关于python 中的__future__模块
Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 具体说来就是,某个版本中出现了某个 ...
- 在ORACLE存储过程中创建临时表
在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...
- codeforces1249-div3
A B C 等比数列的性质,前面的i项的和,不会超过第i+1项 D 有若干个区间,要求每一个点被区间覆盖的次数不能超过k个.问移除的最少的区间的数目. 贪心: 若某个点被覆盖了k次以上,那么肯定是移除 ...
- larave5.6 将Excel文件数据导入数据库代码实例
<?php namespace App\Admin\Controllers; use App\AdminUser; use Illuminate\Http\Request; use Excel; ...
- laravel 中使用tinker注入数据到数据库
- JavaScript的一些SAO操作
IE判断检测 jQuery 在 1.9 版本之前,提供了一个浏览器对象检测的属性 使用率极高.但是在版本发布之后,大家钟爱的这个属性被无情的抛弃了.大家开始着手寻找.browser 的替代方案.于是各 ...
- Spring Boot版本,Spring Cloud版本与组件版本关系
我们在学习Spring Cloud时,可能总是碰到以下问题: 1.Spring Boot版本与Spring Cloud版本关系 2.启动时,报莫名其妙的错,稀里糊涂的换个版本就好了 3.这么多版本,用 ...
- 2019-10-30-C#-dotnet-core-局域网组播方法
title author date CreateTime categories C# dotnet core 局域网组播方法 lindexi 2019-10-30 9:0:48 +0800 2019- ...