基尔霍夫矩阵
前置知识:行列式和矩阵相关。
首先对于任意矩阵,若出现行或列的线性相关那么行列值即为(0),由行列式定义显然
定义对于无向图(G(V,E))的关联矩阵(B)
当(u_iin V,v_jin V,e_k=(u_i,v_j)in E),有(B_{ik}=1,B_{jk}=-1)或(B_{ik}=-1,B_{jk}=1),
定义(B^T)为(B)的转置矩阵(B^T_{ij}=B_{ji}),观察他们两个的乘积:
即(B)的第(i)行和(B^T)的第(j)行的点积。
同时发现如果(i=j),(BB^T_{ij}=deg_i),如果(i eq j),若有((u_i,v_j)in E),则(BB^T_{ij}=-1),若无((u_i,v_j)in E),则(BB^T_{ij}=0)
将(BB^T)称为图的基尔霍夫矩阵。
注意到图的基尔霍夫矩阵(C)也恰好为其度数矩阵(D)减去其邻接矩阵(A)。
0
由转置(det)相等得行列等价,因交换(i,j)行或列的元产生(2(j-i)-3)次相邻交换,即交换行列一定会变号
其他等价于矩阵。
行列式的值为高消变成上三角然后算主对角线积
对于一个由4个(k,k)行列式(a,0,c,b)构成的大行列式(D(2 imes 2)),(D_1)=(det(a_{i,j})),(D_2=det({b_{i,j}})),有
(det(D)=det(D_1)det(D_2))
证明:对(a,b)高消变成下三角(p,q),发现(det(D)=prod_i^kp_iprod_i^kq_i=det(D_1)det(D_2))
对于一个(n)阶行列式,如果其中第(i)行除了(a_{i,j})外均为(0),那么这个行列式等于其代数余子式与(a_{i,j})的乘积
证明:进行(i-1+j-1)次变换后为((1,1))元,然后高消即为((-1)^{i+j}A_{i,j} imes a_{i,j})
矩阵树定理
定义:对于一个无向图G,它的生成树个数等于其基尔霍夫矩阵矩阵(C)任何一个(n-1)阶主子式的行列式的绝对值。
余子式(C_{i,j})定义为删除第(i)行与第(j)列剩下的元素构成的行列式
代数余子式(A_{i,j})为((-1)^{i+j}det(C_{i,j}))
主子式定义为,对于任意一个(i),将其第(i)行与第(i)列同时删除得到的新矩阵命名为(C_i),也就是余子式的限制强了一些。
基尔霍夫矩阵(C)有如下性质
1 (det(C)=0)
证明:因为是度数矩阵-邻接矩阵,所以行的和是0,即线性相关。
2 如果图是不连通的,则其任意(n-1)阶主子式为(0)
证明:考虑重变号后主对角线上处于同一个连通分量的点连续,那么对于一个大小为(k)的连通分量(x)每行仅有连续的(k)个元不为(0),因为对于一个连通图的(C)为0,整个行列式的值为多个行列式值的积,因此为(0)。
3 关于树:
A:若图G是一个树,那么其(C)的任意主子式是1
B:若图G是一个树,那么其(C)的((1,1)+1)之后得到(C'),
(det(C')=1)
C:若图G是一个树,那么其(C)的((1,1)+1)之后得到(C',)对于其主子式(C_1,det=1)
对于证明有一个良好的手段,将树重标号,使得对于一个点(i),其子树内点的编号是连续的[l,r](对于主对角线上连续的一段是一个子树),然后钦点(1)为根。
如果B是对的,那么明显A是对的并且C也是对的。
接下来证明,如果C正确,那么B也正确。如果B正确,那么C也正确。
假设C正确。考虑证B正确,可以得到三个都正确
首先选出来的东西不能是0,这是一定的,所以对于任意一行的选择只有是相对的根节点或者[l,r]。第一行明显有两种选择,一种是选择(1,1),因为假设C正确,考虑行列式的定义,贡献是根的度数+1;如果是选择(1,i),那么一定之后会有一行选择(j,1),并且这个点j一定会和根节点有直接的边相连,因为对于一个子树的根j来说只有1和他自己能选j这一列且j这一列是必须选的,所以如果选了(1,j),一定要选(j,1)
如果选了(1,i)和(i,1),因为两者都是-1且造成一个逆序对,中间的逆序对个数一定是偶数因此一个i的贡献是-1,因为i有根的度数个,所以(1,1)+1之后行列式为1,所以B正确。
Binet-Cauchy定理
两个矩阵A和B,A是(n*m)的,
而B是(m*n)的,那么(det(AB)=)
(1).0 当n>m
(2).(det(A)det(B)),当n=m
(3).(sum_{1leq k_1< k_2leq ...<k_nleq s} det(A)(12...n;k_1k_2...k_n)det(B)(k_1k_2...k_n;12...n))
接下来考虑任意主子式的行列式套进去是什么,定义B是关联矩阵
(vert C_ivert = vert B_i^TB_ivert=sum_{vert svert=n-1}vert B_{i_{s_*}}^TB_{i_{*s}}vert=sum_{vert svert=n-1}vert B_{i_{*s}}vert^2)
实际上就是原图选了(n-1)条边之后基尔霍夫矩阵行列式的余子式
因为不连通和成环均为0,所以只剩下树的为1的贡献,即无根有标号生成树个数
别忘了是无根的
但是实际上算的时候是边权积,所以算出来的生成树是边权积的和
举例
考虑完全图的n个点的有标号无根树计数,
考虑去掉1的主子式,然后第一行加上其余行变成全1,然后用第一行去加其余行,那么除了主对角线上是1,n,n...,n以外其余均为0,
那么就是(n^{n-2})