简单入门一下矩阵树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. android 与 服务器通信

    android 与 服务器通信 服务端代码: (1)control 层 /** * 用户登录 * @return */ @RequestMapping(value = "/login&quo ...

  2. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  3. beta冲刺5

    昨天的问题: 登陆页面的整合重新制作 各主机版本更迭 我的社团显示功能修改调整 主页的头部替换掉 +修复帖子无法显示内容的问题 +试着将邮箱等判定用正则表达式进行实时判定. 今天的完成: 主要是线下进 ...

  4. 利用PCA降维

    参考:<机器学习实战>- Machine Learning in Action 一. 基本思想  PCA(Principal Component Analysis),主成分分析.是目前应用 ...

  5. MySQL的小Tips

    交集和差集 MySQL中没有这两个运算,但是有并集运算,所以可以利用这个来间接实现. 差集: SELECT ID FROM ( SELECT DISTINCT A.AID AS ID FROM TAB ...

  6. 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. H5 音频标签自定义样式修改以及添加播放控制事件

    说明: 需求要求这个音频标签首先要是可适配移动端浏览器的,音频样式就是参考微信做的. 最终效果如下: 具体实现 思路: H5 的 <audio> 标签是由浏览器负责实现默认样式的.所以不同 ...

  8. VS 提示:请考虑使用 app.config 将程序集“XXX”从版本“XX”重新映射到版本“XX”,以解决冲突并消除警告。

    具体提示如下: 请考虑使用 app.config 将程序集"System.Web.Http.WebHost, Culture=neutral, PublicKeyToken=31bf3856 ...

  9. 链家2018春招Java工程师编程题题解

    Light 题目描述 在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮.现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢? 输入 第一行一个n,表示有n组开关.接下来n行,每行第一个 ...

  10. WPF 自定义TextBox带水印控件,可设置圆角

    一.简单设置水印TextBox控件,废话不多说看代码: <TextBox TextWrapping="Wrap" Margin="10" Height=& ...