$Matrix-Tree$定理-理论
$Matrix-Tree$
矩阵的行列式
这个东西看了好久才明白 _ (:з」∠)_ 时间不够可以直接跳到第六段。
看到这种新定义,第一反应还是去翻百度百科:

但是这个讲解真的让人很迷惑...关键就是第二段的开头,突然出现了“n阶行列式”这么一个词,我到现在也没有明白...在这个地方好像就是“n阶矩阵”的意思?而且它还出现了奥妙重重的递归计算,导致完全看不懂行列式到底是个什么东西。
点开一个叫做“余子式”的词条,里面有这么一句话:
“行列式的阶越低越容易计算,于是很自然地提出,能否把高阶行列式转换为低阶行列式来计算。”
这才像话嘛,虽然没有说行列式是什么,但是至少说明了为什么一上来就是一通递归。后来又看了一些资料,发现行列式的关键是“式”,而不能将它简单地认为是一个数,否则很难理解。首先二维矩阵的行列式相当于叉积,三维矩阵的行列式也有几何意义,就是一个平行六面体的体积。所以说了这么多还是不知道行列式是什么啊
${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$ 的逆序对数目。
其实上面那些都没什么用处,毕竟最后我也没弄明白...其实学这些关键还是要用,所以跳过证明,直接看结论:
1.交换矩阵的两行或两列,行列式变号;
2.如果矩阵有两行或两列完全相同,行列式为0;
3.将矩阵某行或某列的所有元素同乘以k后,行列式的值也乘以k;
4.将矩阵的某一行/列加上另一行/列的k倍,行列式的值不变;
有了这些结论,事情就变得非常简单。将矩阵用高斯消元消成一个上三角矩阵,发现一个有趣的性质:
上三角矩阵的行列式是对角线的乘积;
这里要用到的是最复杂的那个行列式,当且仅当 $P$ 为 $1$ $2$ $3$ $4$ $...$ 时,连乘的那些项中才会没有 $0$ ,所以就可以很简单的求出行列式的值了。可喜可贺!
$Matrix-Tree$
别忘了今天的主题是什么呀...
首先看一个新概念:$Kirchhoff$ 矩阵;为了理解它,还要复习两个比较简单的旧概念:
度数矩阵:一个 $N \times N$ 的矩阵,其中 $D[i][i]$=$i$ 的度数;
邻接矩阵:一个 $N \times N$ 的矩阵,其中 $A[i][j]$=$i,j$ 间的边数;
$Kirchhoff$ 矩阵:$K=D-A$
事情突然变得简单起来....先求出$Kirchhoff$ 矩阵,任意删掉一行一列,再求行列式,就是生成树的个数啦!是不是非常神奇呢?复杂度 $O(n^3)$。
对于用这种方法求出来的值,我们还可以有另一种理解方式:
$\sum_T\prod_{e \in T} \omega_e$
这个式子的意思是,枚举每棵可能存在的生成树,将边的存在性相乘,如果每条边都存在,也就是一棵生成树,答案就加一。有了这个式子,就可以扩展出一些有趣的东西来了。
随机推荐
- 域名系统DNS简介
域名系统(Domain Name System, DNS)是互联网的核心应用层协议之一, 它用于查询域名对应的IP地址.在使用域名访问任何网络资源时都需要先进行域名解析. www.cnblogs.co ...
- SVN外网访问内网的操作步骤
外网访问内网SVN 需要将路由映射到VisualSVN server 的443端口 将外网的端口从路由器上进行映射到内网端口,例如将外网的6000端口映射为内网的443端口,443为svn服务器默认端 ...
- java的四个基本特征
现实生活中的事物被抽象成对象,把具有相同属性和行为的对象被抽象成类,再从具有相同属性和行为的类中抽象出父类. 封装 隐藏对象的属性和实现细节,仅仅对外公开接口. 封装的有优点: 1.便于使用者正确.方 ...
- DDD初探
领域驱动设计(DDD)对开发者来说是面向对象设计的自然进化 总的来说DDD包括两个部分: 分析部分 分析部分通常是由开发人员去和领域专家沟通业务知识,但是开发人员和领域专家是有代沟的, 为了简化沟通成 ...
- 如何使tinymce编辑器的高度随内容自变化(转载)
如何使tinymce编辑器的高度随内容自变化 最简单的方法就是在配置时添加Autoresize插件: tinymce.init({ selector: "textarea", // ...
- 8.中断按键驱动程序之poll机制(详解)
本节继续在上一节中断按键程序里改进,添加poll机制. 那么我们为什么还需要poll机制呢.之前的测试程序是这样: ) { read(fd, &key_val, ); printf(" ...
- Java的适配器模式
所谓适配器模式,其实很简单,就是将一个类的接口转换成客户端所期待的另一个接口,使得原本不兼容的两个类可以一起工作. 假设我们有一个Type-c接口,但是要使用的接口确实usb的接口,这时候要怎么办呢? ...
- 配置supervisor管理beego应用
一.golang.beego等环境安装与配置 二.supervisor安装 github项目地址:https://github.com/Supervisor/supervisor 克隆项目:git c ...
- cookie、localStorage、sessionStorage的区别
localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 共同点:sessionStorage.localStorage和cooki ...
- 我的Java之旅 第四课 JAVA 语言语法 基础
1 整型 int num = 1_000_000; //从java 7开始支持的语法 ,只是让人更易读,java编绎器会去除 2 字符串 一定不能使用==运算 ...