参考博客:
矩阵树定理-Freopen
矩阵树定理入土-ixRic
写在前面的话:
在学习矩阵树定理的证明的时候遇到了大量的困难,特别是在 Binet - Cauchy 定理 的证明部分感觉在上述两篇参考资料中的相关证明阐述都有一些问题,所以想在这里重新证明总结一下,并在两篇博客已有的正确证明下加以阐释。
行列式
定义
对于一个矩阵 A ,它第 i 行第 j 列的元素为 ai,j 记
|A|=detA=∑p(−1)τ(p)n∏i=1ai,pi
其中 |A| 和 detA 都表示 A 的行列式,p 是一个排列,τ(p) 是排列 p 中的逆序对个数。
拉普拉斯展开
内容
对于一个 n×n 的矩阵 A 和任意一个 i 满足 1≤i≤n 都有:
|A|=n∑i=1(−1)i+jai,j|Ai,j|
其中, Ai,j 表示对于矩阵 A 删去其第 i 行和第 j 列的元素后形成的新矩阵。
证明
假定 i 已知,考虑依次删除第i 行的每一个元素。
定义
α(p,x,y)=x−1∑i=1[pi>y]+n∑i=x[pi<y]
(该函数与逆序对类似)其中p 为排列。
定义
λA(p)=(−1)τ(p)n∏i=1ai,pi
其中 A 为矩阵, p 为排列。
定义 q 为将 p 排列中 pi 删去,并将 p 中所有大于 pi 的元素减一所生成的一个排列。
所以原定义式等价于
n∑j=1∑p[pi=j](−1)α(p,i,j)⋅ai,j⋅λAi,j(q)
(-1是减去第i位,相当于将第 i 位元素带来的逆序对所带来的系数提前计算。)
考虑直接枚举 q ,则原式等价于:
n∑j=1ai,j∑q(−1)α(q,i,j)⋅λAi,j(q)
考虑化简 α 函数
由定义得:
α(q,i,j)=i−1∑x=1[j≤qx]+n−1∑x=i[qx<j]
(由于在此处,q 中比 j 大的元素都减去了 1 ,因此前一个和式需要取等)
由于 q 是排列,所以 [i,n−1] 中比 j 小的,等于所有比 j 小的数减去 [1,i) 中比 j 小的。
因此可得:
α(q,i,j)=i−1∑x=1[j≤qx]+j−1−i−1∑x=1[qx<j]
对右边和式容斥计算可得:
α(q,i,j)=i−1∑x=1[j≤qx]+j−1−i+1+i−1∑x=1[j≤qx]
α(q,i,j)=2i−1∑x=1[j≤qx]+j−i
由于 (−1)x 的结果仅与 x 的奇偶性有关,因此我们这里也只需要讨论 α(q,i,j) 的奇偶性即可。
由上式得:
α(q,i,j)≡j−i(mod2)
显然 j−i+2i≡j−i(mod2)
因此 j+i≡j−i(mod2)
所以 :
α(q,i,j)≡i+j(mod2)
回归主题,我们前面的式子就等于:
n∑j=1ai,j∑q(−1)i+j⋅λAi,j(q)
等价于:
n∑j=1(−1)i+jai,j∑qλAi,j(q)
由定义得:
n∑j=1(−1)i+jai,j|Ai,j|
至此,我们完成了对拉普拉斯展开的顺向推导。
一些性质
基于拉普拉斯展开和原定义式,我们可以推导出一些比较重要的性质。
可乘性
将矩阵 A 的第 i 行乘以 k 得到矩阵 B ,则有 |B|=k|A|
证明 :由定义式可得,对于任意一个排列,第 i 行有一个元素 kai,j 会被乘入结果,提取公因数可得原式。
可加性
∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1+bi,1ai,2+bi,2…ai,n+bi,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣=∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1ai,2…ai,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣+∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮bi,1bi,2…bi,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣
将第 i 行拉普拉斯展开可证。
行可交换性
对于一个矩阵 A 若将第 i 行和第 j 行交换等到矩阵 B ,那么 |A|=−|B|
证明:设定义式的排列 p 中 pi=x,pj=y,若将第 i 行和 第 j 列交换,则我们也将 x 和 y 交换,考虑逆序对数量的变化。
假定 x<y ,则对于满足 i<k<j 和 x≤pk≤y 的 k 在交换x和y后会同时额外产生 (i,k) 和 (k,j) 两个逆序对。同时又会产生 (i,j) 这样一个逆序对,所以逆序对的变化量为奇数,x>y 时同理,因此交换后结果需要乘以 −1。
因此证得 |A|=−|B|。
不重性
对于一个矩阵 A ,若第 i 行与第 j 行元素对应相等,则 |A|=0。
证明:由可交换性,我们交换 A 的第 i 行与第 j 行得到 B ,所以 |A|=−|B| ,因为 A 与 B 完全一样,因此 |A|=−|A|=0。
可倍加性
∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1ai,2…ai,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣=∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1+kaj,1ai,2+kaj,2…ai,n+kaj,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣
证明:
∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1+kaj,1ai,2+kaj,2…ai,n+kaj,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣
由可加性和可乘性得:
=∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1ai,2…ai,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣+k∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮aj,1aj,2…aj,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣
由不可重性得:
=∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣a1,1a1,2…a1,na2,1a2,2…a2,n⋮⋮⋱⋮ai,1ai,2…ai,n⋮⋮⋱⋮an,1an,2…an,n∣∣
∣
∣
∣
∣
∣
∣
∣
∣∣+k×0
证毕。
转置不变性
对于矩阵 A ,构造矩阵 B 满足 ai,j=bj,i,则 |A|=|B|。
证明:由拉普拉斯展开式子可得,将矩阵翻转,显然等价。
列可交换性
由转置不变性和行可交换性易证。
行列式的快速计算
当行列式 A 中满足只有对角线上方或下方所有元素均为 0 ,则 |A|=n∏i=1ai,i。
证明: 假设对角线上方元素均为 0 ,对第一行拉普拉斯展开,发现只有选择第一行第一个元素时贡献才可能不为 0 ,同时 A1,1 与 A 结构类似,归纳可证。若对角线下方元素均为 0 ,利用转置不变性可证。
有该定理,我们可以利用可倍加性将行列式转化为上述情况快速计算。
矩阵树定理
一些约定
定义 B 为一个无向图的 n×m 的 关联矩阵。
首先给无向图的每一条边随便定义一个方向,则:
bi,j=⎧⎨⎩1点j是边i的起点−1点j是边i的终点0otherwise
定义 G 的基尔霍夫矩阵为 L,其中:
li,j={dii=j−ei,ji≠j
其中 di 表示第 i 个点的度数。
定义 Bi 为矩阵 B 删去第 i行后得到的矩阵。
一些引理
转置引理
内容:
L=BBT
其中 BT 为 B 的转置矩阵。
证明:
分类讨论证明。设 R=BBT,则 ri,i 的值为 B 中第 i 行对应相乘的值的和,恰好为第 i 个点的度数。
ri,j(i≠j) 的值则为 B 中第 i 行和第 j 行每个元素对应相乘的和,恰好等于 −ei,j。
转置引理拓展引理
内容:
Li,i=BiBTi
证明:由原引理显然。
联通性引理
引理1
对于一个图的基尔霍夫矩阵 L ,|L|=0。
证明:根据行列式的可倍加性,将 L 矩阵的每一行全部加到第一行,由于基尔霍夫矩阵的每一列的和为 0 (由定义显然),所以此时第一行元素全为 0 ,对第一行拉普拉斯展开可证。
引理2
对于一个非联通图的基尔霍夫矩阵 L , |Li,i|=0。
由于这是一个非联通图,则至少有两个联通块,Li,i的定义为 L 删去第i 行第 i 列的元素后形成的矩阵,这样做明显只会影响其中一个联通块。
我们不妨使用行可交换性和列可交换性将属于同一个联通块放在一起并将第 i 个联通块缩为一个基尔霍夫矩阵 Ai,i,如下:
∣∣
∣
∣
∣
∣
∣
∣∣A1,100…00A2,20…000A3,3…0⋮⋮⋮⋱⋮000…An,n∣∣
∣
∣
∣
∣
∣
∣∣
其中 0 指全 0 矩阵。
由于只有一个联通块收到影响,所以其他联通块仍可看做完整的基尔霍夫矩阵。
由 引理1 得,
所有不受影响的基尔霍夫矩阵 |Ai,i|=0 。
我们不妨将整个矩阵变换为上三角矩阵,则所有完整的联通块的基尔霍夫矩阵的对角线上必然含有 0 。
则 Li,i 的对角线上也必然含有 0,所以 |Li,i=0|。
引理3
对于一棵树的 n×n 的基尔霍夫矩阵 L,满足 |L|=1。
证明:
考虑采用数学归纳法。
枚举计算易得知 n≤2 时结论成立。
假设对于所有 x×x 的 L (x≤n−1) 结论成立。
考虑证明对于 n×n 的矩阵 L 结论成立。
由于这是一棵树,我们不妨假设 i 为一个叶子节点,我们考虑将 (i,i) 交换到 (n,n) ,由行列可交换性进行交换,交换次数为行列各一次,因此行列式的值不变,设此时行列式为 L。
假设 i 节点父亲节点为 j ,则这个行列式 L 大概长这个样子( di 为节点度数 ):
∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣d1−e1,2−e1,3…−e1,j…0−e1,2d2−e2,3…−e2,j…0−e1,3−e2,3d3…−e3,j…0⋮⋮⋮⋱⋮⋱⋮−e1,j−e2,j−e3,j…dj…−1⋮⋮⋮⋱⋮⋱⋮000…−1…1∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣
考虑删除叶子节点 i ,新图仍然为一棵树,设该新图的基尔霍夫矩阵为 A,则 A 为:
∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣d1−e1,2−e1,3…−e1,j…−e1,n−e1,2d2−e2,3…−e2,j…−e2,n−e1,3−e2,3d3…−e3,j…−e3,n⋮⋮⋮⋱⋮⋱⋮−e1,j−e2,j−e3,j…dj−1…−ej,n⋮⋮⋮⋱⋮⋱⋮−e1,n−e2,n−e3,n…−ej,n…dn∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣
由于 x≤n−1 时结论成立,则行列式 Ai,i 必然可以变换为:
∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣1−a1,2−a1,3…−a1,j…−a1,n01−a2,3…−a2,j…−a2,n001…−a3,j…−a3,n⋮⋮⋮⋱⋮⋱⋮000…1…−aj,n⋮⋮⋮⋱⋮⋱⋮000…0…1∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣
因此,Li,i (i<n&i≠j) 必然可以变换为(只变换左上部分):
∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣1−a1,2−a1,3…−a1,j…001−a2,3…−a2,j…0001…−a3,j…0⋮⋮⋮⋱⋮⋱⋮000…2…−1⋮⋮⋮⋱⋮⋱⋮000…−1…1∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣
考虑将第 n 列的元素全部加到第 j 列(可倍加性和置换不变性),则行列式为:
∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣1−a1,2−a1,3…−a1,j…001−a2,3…−a2,j…0001…−a3,j…0⋮⋮⋮⋱⋮⋱⋮000…1…−1⋮⋮⋮⋱⋮⋱⋮000…0…1∣∣
∣
∣
∣
∣
∣
∣
∣
∣
∣∣
此时行列式的值为 1 。
在 Li,i (i=j)中 ,第 n−1 行和第 n−1 列中,仅右下角的值为 1 ,其余为 0 ,对左上矩阵做类似上述的变换,则易证。
在 Ln,n 中,我们不妨对 j 的位置进行移动,将其根据行列可交换性置换到 (n,n) 的位置,则行列式如下:
∣∣
∣
∣
∣
∣
∣
∣∣d1−e1,2−e1,3…−e1,j−e1,2d2−e2,3…−e2,j−e1,3−e2,3d3…−e3,j⋮⋮⋮⋱⋮−e1,j−e2,j−e3,j…dj∣∣
∣
∣
∣
∣
∣
∣∣
将每一行的元素累加到最后一行可得:
∣∣
∣
∣
∣
∣
∣∣d1−e1,2−e1,3…−e1,j−e1,2d2−e2,3…−e2,j−e1,3−e2,3d3…−e3,j⋮⋮⋮⋱⋮000…1∣∣
∣
∣
∣
∣
∣∣
删除叶子节点的图的基尔霍夫矩阵 A 置换 j 到 n 后,行列式如下:
∣∣
∣
∣
∣
∣
∣
∣∣d1−e1,2−e1,3…−e1,j−e1,2d2−e2,3…−e2,j−e1,3−e2,3d3…−e3,j⋮⋮⋮⋱⋮−e1,j−e2,j−e3,j…dj−1∣∣
∣
∣
∣
∣
∣
∣∣
如图显然:|An−1,n−1|=|(Ln,n)n−1,n−1|
由于 An−1,n−1 可变换为对角线全为 1 的上三角型,则 Ln,n 可变换为:
∣∣
∣
∣
∣
∣
∣∣1−a1,2−a1,3…−e1,j01−a2,3…−e2,j001…−e3,j⋮⋮⋮⋱⋮000…1∣∣
∣
∣
∣
∣
∣∣
此时行列式的值为 1。
此时,我们讨论完成所有情况,归纳完毕。
Binet - Cauchy 定理
写在前面的话
这个定理的证明中,为所阅读的资料中似乎都把逆序对算成了正序对,但由于数对个数为偶数,因此他们得出的结论无误。因此我在他们的基础上在这里给出可能更为科学的证明。
定理内容
设 A 为 n×m 的矩阵, B 为 m×n 的矩阵,则:
|AB|=⎧⎪⎨⎪⎩0n>m|A||B|n=m∑s|An,s||Bs,n|
其中 s 为一个大小为 n 的集合,An,s 表示在 A 中选出 s 这些列组成的矩阵,Bs,n 表示在 B 中选出 s 这些行组成的矩阵。
证明
定义两个辅助矩阵:
M=[A0−IB]N=[0AB−IB]
其中 −I 为对角线为 −1 ,其余全为 0的矩阵,0 为全 0 矩阵。
其中 |M|=|N|。
将 M 和 N 看作行列式,则其满足可倍加性。
在行列式 M 中,我们考虑采用高斯消元的方式处理掉 A。
其相当于将 n+i 行乘以 aj,i 加到第 j 行。
考虑右上角的全 0 矩阵变化情况。
该矩阵中的元素 ci,j 相当于是 A 中第 i 行和 B 中第 j 列的元素对应相乘的和。
恰好满足矩阵乘法定义。证毕。
考虑使用定义式计算 |N| 。
由定义式得,要想结果不为 0,则 pi∈[m+1,n+m] (i≤n) 且 pi=i−n (n<i),所以有:
|N|=(−1)x|AB||−I|
|N|=(−1)x+m|AB|
考虑计算 x。可以发现,我们已经考虑了 AB 内部逆序对(被计算在 |AB| 中),|-I|内部不存在逆序对,则只用考虑 AB 与 −I 的逆序对。
显然有上述可知,AB 的每一个 pi 均大于 −I 的,因此,x=n×m。
所以可得:
|M|=|N|=(−1)n×m+m|AB|
这样,我们就把 M,N 和 AB ,建立联系,下面我们就可以使用更为漂亮的 M 矩阵进行计算证明。
当 n>m 时,M 矩阵如图:

考虑使用定义式计算 M , 要想使得结果不为 0 ,则必须满足 pi∈[1,m] (i≤n) ,因为 n>m ,因此显然无法满足,答案必为 0。
当 n=m 时,M 矩阵如图:

考虑用定义式计算 M ,由于 pi∈[1,m] (i≤n) ,因为 n=m , 所以 −I 不可能有任何一个元素被选中,因此得到:
pi∈[1,n] (i≤n)
pi∈[n+1,2n] (n<i)
有定义式容易得到:
|M|=(−1)x|A||B|
x 为将这些 |A| 中计算的排列与 |B| 中计算的排列拼起来后得到新的逆序对,由图显然,x=0。
则:
|M|=|A||B|=(−1)nm+m|AB|=(−1)n2+n|AB|
n2 与 n 奇偶性相同,所以 n2−n≡0(mod2)。
所以得到:
|A||B|=|AB|
当 n<m 时,M 矩阵如图:

考虑按照题意选择一个集合 s ,继续使用原定义式进行计算证明。
假设我们选择的 s 如图所示:

如图,红色实线即为 A,B 中选出的行和列。
由定义和定理内容显然有:
若 i∈[1,n]则pi∈s
若 (i−n)∈s则pi∈[m+1,n]
同时,若想值不为 0 ,−I 矩阵中,蓝色线条上除了与红色虚线相交部分外都必选。
所以,我们共选了 m−n 个 −1,且 −I矩阵内部无逆序对。
所以有:
|M|=∑s(−1)x+m−n|An,s||Bs,n|
考虑 x 的值,即为 |An,s|,|−I|,|−Bs,n| 三个行列式所选的排列拼起来所新增的逆序对。
由图可得,|An,s|和|Bsn| 之间不会有新的逆序对产生。
对于 −I 蓝色线条选中的任意一个点上考虑计算逆序对。
任意一个点的逆序对个数如图:

设 Q 点为蓝线上选中的任意一点任意,褐色箭头所指即为 Q 与哪些必为逆序对,由图可知,单个点会新增 n 个逆序对,因此 x=n×(m−n)。
所以有:
|M|=∑s(−1)(m−n)(n+1)|An,s||Bs,n|
(−1)nm+m|AB|=∑s(−1)(m−n)(n+1)|An,s||Bs,n|
|AB|=∑s(−1)mn+m−n2−n−nm−m|An,s||Bs,n|
|AB|=∑s(−1)−n2−n|An,s||Bs,n|
显然,−n2−n≡0(mod2)。
所以:
|AB|=∑s|An,s||Bs,n|
该定理证毕。
矩阵树定理
内容: 对于一个无向图的基尔霍夫矩阵 L ,|Li,i| 即为这个图的生成树个数。
由转置引理拓展得:
Li,i=BiBTi
因此有
Li,i=|BiBTi|
因为 Bi 和 BTi 为 (n−1)×m 的矩阵且 n≤m ,所以由 Benet-Cauchy 定理得:
Li,i=∑s|(Bi)n−1,s||(BTi)s,n−1|
此时 (Bi)n−1,s 和 |(BTi)s,n−1| 为 (n−1)×(n−1) 的矩阵,因此,由 Benet-Cauchy 定理得:
Li,i=∑s|(Bi)n−1,s(BTi)s,n−1|
我们不妨考虑这个式子的实际意义。
(Bi)n−1,s 实际上可以看做一个有着 n−1 条边, n 个点的无向图的关联矩阵删去了第 i 个点。
因此设该无向图的基尔霍夫矩阵为 A, 由转置引理扩展可得(Bi)n−1,s(BTi)s,n−1 的结果应该是 Ai,i。
由于这个无向图有着 n 个点 n−1 条边,因此由联通性引理得,如果它联通则必为树,所以 |(Bi)n−1,s(BTi)s,n−1|=|A|=1,否则则不联通,结果为 0。
因此整个式子中,枚举 s 的过程可以视作枚举边集的过程,所以整体的意义就可以表示为枚举一个边集,如果为树则带来一的贡献,否则则不贡献,恰好满足生成树个数的定义。
因此矩阵树定理证毕。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)