您的位置:首页 > 其它

基尔霍夫矩阵树定理-Matrix_tree

2018-01-01 19:22 204 查看
http://vfleaking.blog.163.com/blog/static/1748076342013112523651955/

说明:我的博客里面只写出了我对这篇博客的证明方法的理解,这篇博客写的很好,证明的过程很详细。我这里给出我自己对这个证明方法的理解。

首先说明一下,这个矩阵树定理的作用是判断一张图,它的生成树有多少个。至于有没有其他的用处我是不知道的。

要想看懂这篇博客,线性代数要学的很好,其实线性代数这个东西挺重要的,它把我们高中以前积累的解方程的传统思维给颠覆了。在里面会学到新的关于解方程的方式,对于线性代数是用来解方程的,我认为这也只是冰山一角,有了行列式和矩阵这种新颖的表达方式,思维就被打开了,很多新的理论就被推出了,很是神奇的工具。线性代数这门课在数学系叫高代,数学系要学一年多的,比数学分析要学的时间都要长,而且比数学分析 要难。研究生必修课里面有一门课就叫矩阵理论,今天在图书馆看到有很多研一的在复习这门课,可以看出线性代数这东西的重要性。我大一线性代数学的在我看来只能算是一般,应付应付考试还算可以,但是要真的是拿出来真刀真枪的干的话怕是不行咯,并且现在也忘的差不多了,看上面博客也是很有难度的。说了这么多总结起来就是学好线性代数很重要,受益很多,我自己也要好好去回忆一下这门课的知识了。

废话不多谈了,还是谈一下上面的博客吧,首先我们介绍一个矩阵,我们有一张图,这张图有n个点,n-1个边,所以这张图可能是棵树,我们把这n个点作为矩阵的行,n-1个边作为矩阵的列,我们给边的起点和终点分别设为1和-1.其余的就为0。于是我们得到了一个n*n-1的矩阵,我们想要构造出一个行列式出来,于是我们随意删除掉矩阵的一行,这样我们就得到了以个n-1* n-1的矩阵,我们假设我们有一棵这样的树,并把这棵树对应的这个矩阵写出来就是下图所示的样子了。我们去掉矩阵的一行后,意思其实就是去掉了一个节点,这样有的边只有一个节点了,但是我们仍然把它画出来。上面的操作就是下图所表示的这样了。



上面这张图是我从那位老哥的博客中直接复制的。是一个例子,很浅显易懂对不对。

有了这个矩阵,我们就想要算一下它的行列式,注意把行列式的一列或者是一行乘以一个数加到另一行上行列式是不变的的!于是看到上述行列式中有-1 和 1对应的两个列我们就给它加加看,发现效果就是对于一个节点出去的两条边,作用是把一条边的一个节点改到另一个节点上去


有了这个变换,我们就想着把上述那个被删除掉的节点变成所有边的一个节点


而这张图变换(乘以几个-1)一下可以变成单位行列式

所以我们去掉一个节点后得到的行列式D^2 = 1。

那么对于不是树的图的话,它经过这样的变换得到的行列式的值是多少呢,如果也是1的话我们上面做的工作不久白费了吗!

幸运的是如果是我们的图如果有环的话,我们就会得到多个连通分支,这样我们去掉了一个点,这个点可能是树上的也可能是环上的,所以我们就不能像上述的那种方法把所有的边的一个节点都集中到一起去,但是对于每个连通分支我们可以单独地进行变换,每个连通分支选定一个点,把那个连通分支的所有点都变换到选定的点上去,对于有环的分支,他们中会出现重边!所以行列式中会出现两个相同的列,从而不是树的图的行列式的值为 0!

于是我们求出一个图的生成树的个数的方法就是对这个图的n-1条边的子图G’进行枚举,并算出子图对应行列式的值并对其求和,从而我们就求出了结果,但是我们枚举一个图的边数为n-1的子图又很麻烦,所以能不能直接从原图G进行求解呢?

首先我们构造出来一个矩阵





这个矩阵被称为M,是一个n-1+m 的方阵,那么这个矩阵的行列式是怎么算的呢,我们利用求行列式的最初的定义的方法,求一求这个矩阵的行列式



这个求法就是枚举所有列的取法,比如第一行对应第几列,第n行对应第几列,然后我们根据获得了n个行列式中的值,算出这n个值的乘积,和-1^逆序对(j1,j2,…jn)相乘,并把枚举的所有结果都相加,最后得到的就是矩阵行列式的值。

首先看出如果取到的列为0的话对结果是没有贡献的,那么前n-1行只能在前m列里面取,对于后面m行,前m列还剩m-n+1列能取到,这些值都是-1,而且这些前m列剩下m-n+1必须取到,这样就剩下后面n-1列了,对应后m行里面剩下的n-1行,所以最后算出的结果是



那个-1^(n+1)m是根据逆序对算出来的,大致就是从A和B算出的逆序对是不用管的,因为A最上面,而B在最右边,只用考虑单位矩阵里面的逆序对,而这个逆序对是一个定值,所以我们得到上面那个结果,这个是我们用定义算出来的,另外我们还能根据行列式的变换和分块行列式的计算算出

det(M) = (-1)^(m * (n + 1)) * det(AB)

最终我们知道:



于是就有


我们求出来det(E’(G)E’(G)^T)就能求出我们想要的图的生成树的数量了!

而这个矩阵是个什么东西呢?

我们看一下E(G)*E(G)^T,我们想要的矩阵从这个矩阵中删去一行一列就能得到了!

自己构造一张图,并且模拟一遍就知道这个矩阵就是

L = 度数矩阵 - 邻接矩阵

最后得出结论:一个无向图G的生成树个数为det(L’)。其中L’是G的拉普拉斯矩阵去掉第i行第i列的矩阵(1 <= i <= n)。至于i具体是几其实无所谓。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: