$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$
這個式子的意思是,枚舉每棵可能存在的生成樹,將邊的存在性相乘,如果每條邊都存在,也就是一棵生成樹,答案就加一。有了這個式子,就可以擴展出一些有趣的東西來了。
$Matrix-Tree$定理-理論