简单入门一下矩阵树Matrix-Tree定理。(本篇目不涉及矩阵树相关证明)

一些定义与定理

  • 对于一个无向图 G ,它的生成树个数等于其基尔霍夫Kirchhoff矩阵任何一个N-1阶主子式的行列式的绝对值。
  • 所谓的N-1阶主子式就是对于一个任意的一个 r ,将矩阵的第 r 行和第 r 列同时删去得到的新矩阵。
  • 基尔霍夫Kirchhoff矩阵的一种求法:

    基尔霍夫Kirchhoff矩阵 K =度数矩阵 D - 邻接矩阵 A

基尔霍夫Kirchhoff矩阵的具体构造

  • 度数矩阵D:是一个 ${N}\times{N}$ 的矩阵,其中

    $D[i][j]=0\;{(i}\neq{j)}$,$D[i][i]=i号点的度数$

  • 邻接矩阵A:是一个 ${N}\times{N}$ 的矩阵,其中

    ${A[i][i]=0}\;{,}\;{A[i][j]=A[j][i]=i,j之间的边数}$

  • 然后基尔霍夫Kirchhoff矩阵K=D-A
  • 举个例子,对于如下的无向图,三个矩阵分别为

行列式det(K)求法

  • 已经得出了基尔霍夫Kirchhoff矩阵,那么随便去掉某一行一列并计算出新矩阵的行列式,其绝对值即为生成树个数。
  • ${det(K)=}\sum_{P}^{ }\;{(}{(-1)}^{\tau{(P)}}\times{K}_{1,p1}\times{K}_{2,p2}\times{K}_{3,p3}\times\cdots\times{K}_{N,pN}{)}$
  • 上面的式子中的 P 为 1~N 的任意一个排列。$\tau{(P)}$表示排列 P 的逆序对数。而那个求和式的每一项可以看做是在矩阵中选出N个数,使得他们的行列都不重合。
  • 求和式共有$N!$项,暴力求法的复杂度 ${O(N!)}\times{N}$
  • 这个复杂度过高了,看完了下面的行列式性质,然后引出优化求解方法。

行列式的性质

  • 性质.1  互换矩阵的两行(列),行列式变号。

    这个需要简单说明一下。

    考虑对于原矩阵 K,我们可以得到其行列式的求和式:

    ${det(K)=}\sum_{P}^{ }\;{(}{(-1)}^{\tau{(P)}}\times{K}_{1,p1}\times{K}_{2,p2}\times{K}_{3,p3}\times\cdots\times{K}_{N,pN}{)}$

    若交换某两行的位置后得到了 K' 矩阵,若写出其行列式的求和式,不难发现,如果不看符号位的变化,只看每一个乘积项,那么这两个的矩阵的行列式的求和式是完全相同的。我们把相同的乘积项移到对应的位置,如图示:

    但是很显然,两个矩阵的这一项对应的排列 P 和 P' 不同:

    P :1 2 4 3

    P':3 2 4 1

    那这个符号位的变化是什么呢?

    从例子看得出来,τ(P) = 1 ,符号位为 –1;τ(P')=4,符号位为 1。

    那是不是都是这样的呢?

    即原来是 -1,现在就是 1;即原来是 1,现在就是 -1?逆序对变化量为奇数?

    答案是肯定的,证明如下:

    由此可知,逆序对数的变化量为奇数,即两个det()求和式的对应的每一项的符号位都相反,所以互换矩阵的两行(列),行列式变号

    (有了这个性质,下面的就比较简单了。)

  • 性质.2  如果矩阵有两行(列)完全相同,则行列式为 0

    证明,由性质.1可知:因为交换这两行,得到的矩阵和原来相同,但是又要变号,则行列式的值只能为 0。

  • 性质.3  如果矩阵的某一行(列)中的所有元素都乘以同一个数k,新行列式的值等于原行列式的值乘上数k。

    这个的证明就是把那个求和式的每一项都提出一个公因子k就好了。

  • 推论  如果矩阵的某一行(列)中的所有元素都有一个公因子k,则可以把这个公因子k提到行列式求和式的外面。
  • 性质.3  如果矩阵有两行(列)成比例(比例系数k),则行列式的值为 0

    证明:也是把其中一行提出一个公因数k,那么剩下的det( )求和式所代表的矩阵中存在一行或一列完全相同,则值为 0。

  • 性质.4  如果把矩阵的某一行(列)加上另一行(列)的k倍,则行列式的值不变。

    证明:可以从求和式子的每一项的那一行的那个元素下手,

    把det( )求和式拆成两个 det( )求和式:

    det1( )与原矩阵的行列式求法相同

    det2( )所代表的矩阵中有两行成比例,比例系数为k,值为0 。

    所以相比原来的行列式,值不变。

优化行列式的求法

  • 首先对于这样一个矩阵:

    注意到了么,是一个上三角矩阵(左下半部分的元素值为 0)。

    其行列式的值为对角线的乘积,(同理下三角矩阵)

    因为只有 P = 1 2 3 4 时,乘积项中才没有 0出现。

  • 同时注意到性质.4,所以采用高斯消元的方法,把矩阵消为一个上三角矩阵后,然后求出对角线的积,便是该矩阵的行列式的值。
  • 复杂度 O(N3),快了很多。

矩阵树Matrix-Tree定理与行列式的更多相关文章

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

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

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

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

  3. 数学-Matrix Tree定理证明

    老久没更了,冬令营也延期了(延期后岂不是志愿者得上学了?) 最近把之前欠了好久的债,诸如FFT和Matrix-Tree等的搞清楚了(啊我承认之前只会用,没有理解证明--),FFT老多人写,而Matri ...

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

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

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

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

  6. HDU 4305 Lightning Matrix Tree定理

    题目链接:https://vjudge.net/problem/HDU-4305 解法:首先是根据两点的距离不大于R,而且中间没有点建立一个图.之后就是求生成树计数了. Matrix-Tree定理(K ...

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

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

  8. BZOJ.4894.天赋(Matrix Tree定理 辗转相除)

    题目链接 有向图生成树个数.矩阵树定理,复习下. 和无向图不同的是,度数矩阵改为入度矩阵/出度矩阵,分别对应外向树/内向树. 删掉第i行第i列表示以i为根节点的生成树个数,所以必须删掉第1行第1列. ...

  9. BZOJ.1016.[JSOI2008]最小生成树计数(Matrix Tree定理 Kruskal)

    题目链接 最小生成树有两个性质: 1.在不同的MST中某种权值的边出现的次数是一定的. 2.在不同的MST中,连接完某种权值的边后,形成的连通块的状态是一样的. \(Solution1\) 由这两个性 ...

  10. [模板]Matrix Tree定理

    结论:一个图的生成树个数等于它的度数矩阵减邻接矩阵得到的矩阵(基尔霍夫矩阵)的任意一个n-1阶主子式的行列式的绝对值 证明:不会 求法:高斯消元 例题:[HEOI2013]小Z的房间 #include ...

随机推荐

  1. 福州大学W班-alpha冲刺评分

    作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1159 作业要求 1.前期准备 阅读学习&l ...

  2. 学号:201621123032 《Java程序设计》第14周学习总结

    1:本周学习总结 2:使用数据库技术改造你的系统 2.1:简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 建立一个图书馆的表 建立读者用户个人的借书信息表---但是目前没有办法做到 ...

  3. AWS EC2服务器的HTTPS负载均衡器配置过程

    AWS EC2服务器配置负载均衡器步骤:   1.普通负载均衡器   至少两台EC2实例,这里以Centos6.7系统为例 启动之后先安装个apache的httpd服务器默认80端口,或者使用其他服务 ...

  4. Flask 学习 四 数据库

    class Role(db.Model): __tablename__='roles' id = db.Column(db.Integer,primary_key=True) name = db.Co ...

  5. caffe实现GAN

    我实现GAN网络结构比较复杂: 通过建立两个一模一样的网络,他们相对应的层共享权重,一个网络用来跟新D model另一个网络用来更新G model 更新G model的网络,D部分只进行梯度传递,不进 ...

  6. Css之导航栏下拉菜单

    Css: /*下拉菜单学习-2017.12.17 20:17 added by ldb*/ ul{ list-style-type:none; margin:; padding:; overflow: ...

  7. JAVA_SE基础——59.权限访问修饰符

    了解了包的概念,就可以系统的介绍Java中的访问控制级别.在Java中,针对类.成员方法和属性提供了四种访问级别,分别是private.default.protected和public. 权限访问修饰 ...

  8. linux下面的智能解压脚本smart解压

    file命令可以辨别出一个给定文件的文件类型,如:file lf.gz,其输出结果为: lf.gz: gzip compressed data, deflated, original filename ...

  9. LeetCode & Q14-Longest Common Prefix-Easy

    String Description: Write a function to find the longest common prefix string amongst an array of st ...

  10. Vue.js和jQuery混合使用的一点注意事项

    首先,Vue 的官方是不建议直接操作 DOM 的,其优势在于视图和数据的双向绑定,而且所有DOM操作都可以用Vue实现,反而使用jQuery来操作DOM的话,会造成不必要的麻烦,DOM未渲染完成之前事 ...