【生成树计数】Matrix-tree定理学习笔记

学完了矩阵和行列式基础知识,终于可以去学矩阵数定理~(≧▽≦)/~

———————————–线割分是我>w<———————————————–

Matrix-tree定理,又叫Kirchhoff矩阵定理,于1847年首次被基尔霍夫先生证明,后来被广泛应用于生成树的计数问题.

要用它,需要先知道几个重要概念:

无向图的度数矩阵邻接矩阵.

假定有无向图G,图中共有n个点.

G的度数矩阵称D[G],邻接矩阵称A[G].这两个矩阵的大小都是n*n的.

对于D[G],他满足:

di,j={0,            i≠jvi的度数,   i=j

而邻接矩阵就是平时用的那种i,j有边为1无边为0的那个.

然后我们定义图G的基尔霍夫矩阵C[G]=D[G]-A[G].

基尔霍夫矩阵的性质:

①对于任意一个图,他的基尔霍夫矩阵C的行列式的值为0.

因为显然基尔霍夫矩阵的每一行或者列上元素的和都是0啊= =

②如果图G不连通,其基尔霍夫矩阵的任意主子式行列式值为0.

补充:关于主子式:在一个n阶的行列式中,选取几行,再选取列号与被选行号相同的几列,这两个被选取部分相交的元素组成的新的行列式,就是原n阶行列式的i阶主子式(这个i阶主子式是一个i*i的行列式).

如:

A=?????1231311530227543?????

从A中找一个2阶主子式.选择的数分别是1,3那么对应的主子式就是:

A′=[1332]

既然前提是G不连通,那么我们假设G中有k个连通分量(称为G1,?,Gk).一开始这个矩阵是散乱的:

C=???????Gi10?00Gi2?0????00?Gik???????

我们通过交换矩阵的行和列使得矩阵中每个G按下标顺序排列.这个过程交换次数是偶数次(行交换了x次,列必定也要交换x次),所以行列式的值不变(由之前行列式的性质).如:

C[G]=???????G10?00G2?0????00?Gk???????

由于任意两个不同联通分量之间不相连,所以除了主对角线上的元素,其他元素都是0.

定义Cr[G]为将C[G]去掉第r行第r列剩下的那个n-1阶矩阵.

令r为第i个联通分量里的第j个顶点.这时候Cr[G]只是一个主子式,因此还暂时不能用性质①得到结论.

那么

Cr[G]不是完整矩阵,其他的C[Gi]是啊= =所以上面那个式子的正确性就不言而喻,性质②得证(≧▽≦)/~

③若图G是一棵树,则C[G]的任意一个n-1阶主子式的行列式的值为1.

这条性质和Matrix-tree定理本体息息相关…所以在这里写下Matrix-tree定理的内容:

G 的所有不同的生成树的个数等于其基尔霍夫矩阵C[G]任何一个 n-1 阶主子式的行列式的绝对值。

证明过程好长好长…我还没全弄明白,没法复述下来了…

贴一下论文里的图吧QAQ

到这里定理证明完毕(虽然并不是我证的> A <)

所以Matrix-tree定理也算是学完了吧…(至少知道怎么用了…第三个性质的证明以后多看几遍早晚会看懂的!0w0)

时间: 2024-07-29 21:25:55

【生成树计数】Matrix-tree定理学习笔记的相关文章

@算法 - [email&#160;protected] matrix - tree 定理(矩阵树定理)

目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 定理主体@ @证明 part - [email protected] @证明 part - [email protected] @证明 part - [email protected] @证明 part - 4@ @2 - 一些简单的推广@ @3 - 例题与应用@ @0 - 参考资料@ MoebiusMeow 的讲解(超喜欢这个博主的!) 网上找的另外一篇讲解 @0.5 - 你所需要了解的线性代数知识@ 什么是矩阵

《机器学习导论》第三章 贝叶斯决策定理 学习笔记

在机器学习领域,我们碰到的第一个问题就是:如何选择特征量. 可是看了一些资料,这点好像都是一笔带过,因为很多都是所谓的不可观测量,如何把不可观测量量化呢?这个或许能给机器学习带来新的契机,就像当年牛顿把力.质量.加速度等模糊的概念定义下来,经典物理出现了前所未有的发展,香农把信息量化,造就了信息革命. 以前觉得贝叶斯好像没有大家说的那么神奇,现在知道,是因为当年对它的理解就有问题,贝叶斯更重要的一点应该是能够在加入evidence的情况下,从先验概率进化到后验概率,这点简直就是机器学习的内涵啊

HDU 4305 Lightning Matrix Tree定理

题目链接:https://vjudge.net/problem/HDU-4305 解法:首先是根据两点的距离不大于R,而且中间没有点建立一个图.之后就是求生成树计数了. Matrix-Tree定理(Kirchhoff矩阵-树定理).Matrix-Tree定理是解决生成树计数问题最有力的武器之一.它首先于1847年被Kirchhoff证明.在介绍定理之前,我们首先明确几个概念: 1.G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0:当i=j时,dij等于vi的度数. 2.G

[spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)

In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we have a list of cities that can be c

设备树(device tree)学习笔记一

如何查看编译生成的设备树的内容? 在设备树学习的时候,如果可以看到最终生成的设备树的内容,对于我们学习设备树以及分析问题有很大帮助.这里我们需要使用设备树生成工具dtc的反汇编功能 [email protected]:~/tq2440/Linux/linux-4.0.1# ./scripts/dtc/dtc -h Usage: dtc [options] <input file> Options: -[qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv] -q, --quiet Q

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

如果不谈证明,稍微有点线代基础的人都可以在两分钟内学完所有相关内容.. 行列式随便找本线代书看一下基本性质就好了. 学习资源: https://www.cnblogs.com/candy99/p/6420935.html http://blog.csdn.net/Marco_L_T/article/details/72888138 首先是行列式对几个性质(基本上都是用数学归纳法证): 1.交换两行(列),行列式取相反数 2.由1.得若存在两行(列)完全相同则行列式为0 3.上(下)三角行列式即主

生成树计数 Matrix-Tree 定理

一直都知道要用Matrix-Tree定理来解决生成树计数问题,但是拖到今天才来学.博主数学不好也只能跟着各位大佬博客学一下它的应用以及会做题,证明实在是不会. 推荐博客https://blog.csdn.net/u011815404/article/details/89091011(Matrix-Tree定理) https://blog.csdn.net/u011815404/article/details/99679527(写得无敌好的生成树计数了) 那么比较常见的生成树计数问题就三种:①生成

kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数

第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一个环,如果还要维护处树的特点 那么就要在这个环上删去一条边,这样他还是树,删掉的边显然是这条链上权值最大边更可能形成次小生成树.那么就有2中方法可以做. 第一种PRIM在prim时候直接可以做出这个从I到J的链上权值最大的值MAX[i][j]; 同时可以用kruskal同样方式标记树边,然后DFS跑

Scala学习笔记及与Java不同之处总结-从Java开发人员角度

Scala与Java具有许多相似之处,但又有许多不同.这里主要从一个Java开发人员的角度,总结在使用Scala的过程中所面临的一些思维转变.这里只是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.下面列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码示例及详细阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接: 语句可以不用";"结束,且推荐不适用";": 变量声明时以var或val开头