簡單入門一下矩陣樹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之間的邊數}$
行列式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),快了很多。
- 另外再加一個。
如果要求的矩陣不允許出現實數,且需要取模。
則采用輾轉相除的高斯消元法。時間復雜度多一個 O(logN)