前言
为了回归算法本身,为了搞懂算法,我参考了不同博客,并将他们做出整合和补充:
- https://www.luogu.com.cn/blog/tanrui-2960967961/matrix-tree-ding-li-ji-ji-ying-yong#
- https://blog.csdn.net/a_crazy_czy/article/details/72971868
- https://www.cnblogs.com/zj75211/p/8039443.html
- https://www.cnblogs.com/lishuyu2003/p/12093947.html
本文将分成 个部分:行列式的性质,定理的证明,定理的应用和扩展。标记的即为暂时不懂的地方,会渐渐完善
行列式的性质
性质1:互换矩阵的两行(列),行列式变号
可以看如下示例(盗个图)
对于后面乘积相同的两项,我们只用考虑前面系数变化的情况,即行列式的变化情况。
此处引出一个结论,对于一个排列,交换其中两个元素,行列式变化为奇数:
那么后面的乘积不改变,而前面的系数是一定要变号的,所以行列式变号。
性质2:如果有两行完全相同,行列式为0
交换这两行,得到的矩阵相同,行列式不变,但由 得行列式变号,所以行列式一定为
性质3 如果矩阵的某一行(列)中的所有元素都乘以同一个数k,新行列式的值等于原行列式的值乘上数k
提公因数即可
类似地,如果矩阵的某一行(列)中的所有元素都有一个公因子k,则可以把这个公因子k提到行列式求和式的外面。
性质4 如果矩阵有两行(列)成比例(比例系数k),则行列式的值为 0
先把这个比例系数提出去,然后可以运用性质2
性质5 如果把矩阵的某一行(列)加上另一行(列)的k倍,则行列式的值不变
考虑行列式的计算,我们把它拆成两部分,分别是原来的部分和新加的部分(因为每一行只会选一个,看做特殊的分配率),新加的部分一定满足性质4,加上的部分行列式为 ,所以行列式不变。
优化行列式求法
综上,我们可以把矩阵消成上三角矩阵,求对角线乘积即为行列式的值,时间复杂度
标记1
:如果要求的矩阵不允许出现实数,且需要取模,可以看看给出的博客,我不会。
Matrix Tree定理的证明
内容
矩阵是指的对于一个图构造出来的一个矩阵,具体定义为度数矩阵减去邻接矩阵,度数矩阵指:
定理:一个图中的生成树个数等于其
矩阵的任意一个代数余子式的行列式。
性质1
一个图的 矩阵行列式为零。
可以考虑高斯消元的过程,一开始每一行的和为 ,而消元过程中每一行的和保持是 ,最后我们要消成上三角矩阵,最后一行只有最边上元素可能有值,而行和为 ,这个值也是 ,所以行列式为
性质2
一个图的 矩阵的任一代数余子式的行列式相同。
标记2
:yysy,这个性质我证不来
前置定义
我们定义一个图的关联矩阵 为:对于第 条边 ,
一个矩阵的转置矩阵为:
有一个性质,设这个图的
为
:
标记3
:yysy,这个性质我证不来
Part 1
对于一个非联通图 ,
设
为
删去第
行第
列后得到的矩阵,设
为第
个强联通分量,我们把同一个强联通分量的结点通过交换行换到一起(虽然会变号,但如果行列式为
就没关系),
矩阵变为这样:
其中
(
矩阵的性质
),我们可以看出:
所以
,也不难推知
Part 2
对于一棵树 ,
标记4
:yysy,我不会证
Part 3
标记5
:yysy,这个定理不会证明
首先要知道
定理,内容大致如下:
其中A是一个
的矩阵,B是一个
的矩阵,
是把
的一些行删去(剩下的行集合为
)使之成为
的矩阵,
类似地删去它的列。
套用这个定理,我们可以推倒:
结合
和
,我们可以知道当是一棵树的时候会产生
的贡献,其余情况为
,所以
即为生成树个数。
应用及扩展
板题
我因为输出格式卡了很久,我好像是sb(自信点,把好像去掉)
板题2
点此看题解(一站式服务)
矩阵树定理的扩展
这是对于更宽泛的问题,做做这道题吧
有向扩展
什么?矩阵树还能有向扩展?
比较基础的是这道题
综合应用