Matrix-tree 定理的一些整理
\(Matrix-tree\) 定理用來解決一類生成樹計數(shù)問題,以下前置知識內(nèi)容均是先基于無向無權(quán)圖來介紹的。有關(guān)代數(shù)余子式的部分不是很明白,如果有錯誤還請指出……
部分內(nèi)容參考至:\(Blog\_1\) & \(Blog\_2\)。
\(Laplacian\) 矩陣
定義:
在 \(n\) 個點的無向圖中:
度數(shù)矩陣 \(D\) 即為一個 \(n*n\) 的矩陣,定義為 \(D[i][i]=i\) 號點的度數(shù),\(D[i][j]=0\) \((i \ne j)\)。
鄰接矩陣 \(A\) 即為一個 \(n*n\) 的矩陣,定義為 \(A[i][j]=i, j\) 之間的邊數(shù)。
則其拉普拉斯矩陣其實就是圖的度數(shù)矩陣減去鄰接矩陣,即 \(L=D-A\)。
對此,可以直接的總結(jié)出 \(laplacian\) 矩陣中各元素的值為:
\[ L_{i,j}= \left \{ \begin{aligned} degree(i) & & i = j \\ -\ Edge\_number(i, j) & & i \ne j\\ \end{aligned} \right.\]
矩陣行列式性質(zhì)及求法
行列式:
在一個 \(n*n\) 的矩陣中,選出 \(n\) 個互相不同行不同列的數(shù),其乘積的值冠以符號 \((-1)^t\),得到式子:\((-1)^t\ ·\ a_{1,p_1}\ ·\ a_{2,p_2}\ ·\ a_{3,p_3}\ ·\ ...\ ·\ a_{n,p_n}\);
其中,\(p\) 為自然數(shù) \(1~n\) 的一個排列,\(t\) 為這個排列的逆序?qū)?shù),可知形同上式的項共有 \(n!\) 個。所有這些項的代數(shù)和稱為矩陣的 \(n\) 階行列式,簡記為 \(det(i,j)\),其中數(shù) \(i,j\) 為行列式 \(D\) 的 \((i,\ j)\) 元。
也可以理解為矩陣 \(A\) 任意一行(列)的各元素與其對應(yīng)的代數(shù)余子式乘積之和。
行列式的性質(zhì):
· 互換矩陣的兩行(列),行列式變號
· 矩陣有兩行(列)成比例(比例系數(shù) \(k\)),則行列式的值為 \(0\)
· 矩陣的某一行(列)中的所有元素都乘以同一個數(shù) \(k\),新行列式的值等于原行列式的值乘上數(shù) \(k\)
· 把矩陣的某一行(列)加上另一行(列)的 \(k\) 倍,則行列式的值不變
行列式的求法:
按照定義來求行列式的復(fù)雜度實在是太高了,考慮一些更快的方法。
給出一個上三角/下三角矩陣,其行列式的值為對角線的乘積,因為只有 \(p={1,2,3...n}\) 時,乘積項中才沒有 \(0\) 出現(xiàn)。
采用高斯消元的方法,把矩陣消為一個上三角矩陣后,然后求出對角線的積,便是該矩陣的行列式的值。
高斯消元
高斯消元:
上面提到了高斯消元,我之前也學(xué)習(xí)過,不過忘記的差不多了……(之前的博客)
這里簡單放一下,順便做個復(fù)習(xí)補充。
模意義下的高斯消元:
如果要求的矩陣不允許出現(xiàn)實數(shù),且需要取模,則采用輾轉(zhuǎn)相除的高斯消元法,至于這個輾轉(zhuǎn)相除,復(fù)雜度高不了多少。
眾所周知 高斯消元需要做除法,而模意義下是沒有除法拿來做的。計算高斯消元的時候,如果模數(shù)是質(zhì)數(shù),那么除法逆元可以直接用費馬小定理解決。否則我們對于矩陣中的兩行,不斷地把主元較大的那一行減去主元較小的那一行,最終一定有一行主元為 \(0\),也就完成了消元。
發(fā)現(xiàn)以上思想是更相減損術(shù)的思想,效率太低,就可以拿輾轉(zhuǎn)相除代替。
需要注意的是,我們在做的時候會交換行,而由行列式的性質(zhì),我們需要統(tǒng)計一下交換的次數(shù):如果次數(shù)為奇數(shù),那么最后的答案還要乘上模意義下的 \(-1\)。
\(Matrix-tree\) 定理
定理內(nèi)容:
應(yīng)用中,無向圖的生成樹個數(shù)就等于這副圖的 \(laplacian\) 矩陣的任意一個代數(shù)余子式值,也可以理解為 \(laplacian\) 矩陣一個余子式的行列式的值。
余子式和代數(shù)余子式:
\(M_{i,j}\) 表示矩陣的一個余子式,指去掉元素 \(a_{i,j}\) 所在的行和列后剩余的矩陣部分。
\(C_{i,j}\) 表示矩陣的一個代數(shù)余子式,定義為 \(C_{i,j}=(-1)^{i+j}M_{i,j}\)。
定理總結(jié):
· 存在性質(zhì):\(laplacian\) 矩陣的任意一個代數(shù)余子式值都相同。
· 求得 \(laplacian\) 矩陣后,取一個余子式用高斯消元得到新矩陣的上三角矩陣,對角線乘積的絕對值就是生成樹個數(shù)。
定理推廣:
對于消去自環(huán)影響的有向圖,也可以求以 \(i\) 為根的外向樹/內(nèi)向樹個數(shù),此時的 \(laplacian\) 矩陣定義為:
\[ L_{i,j}= \left \{ \begin{aligned} in\_degree(i)\ or\ out\_degree(i) & & i = j \\ -\ Edge\_number(i\ to\ j) & & i \ne j\\ \end{aligned} \right. \]
例題及拓展性質(zhì)
\([SDOI2014]\) 重建:
給一個圖,每條邊有出現(xiàn)概率,求這個圖恰好為一棵樹的概率。
考慮 \(laplacian\) 矩陣的意義:之所以能夠進行生成樹計數(shù)是對于其關(guān)聯(lián)矩陣在計數(shù) \(n?1\) 條邊的集合時,當(dāng) \(n?1\) 條邊中存在環(huán)就會產(chǎn)生線性組合而導(dǎo)致行列式為零,否則恰好對角線上均為關(guān)聯(lián)矩陣中所賦的值,使得 \(det(B_{i,j})^2\) 就為 \(1\)(有關(guān)這一部分的理解請看文章首部給出的 \(Blog\_2\) 鏈接)。
因此可以令鄰接矩陣中存下邊權(quán),以計數(shù)生成樹中邊權(quán)的乘積。
這道題告訴我們:鄰接矩陣中的的權(quán)可以不是 \(1\),而是其他權(quán)值,比如概率。
了解了這個之后,就直接放一篇別人的題解 \(Blog\_3\) 在這里好了。
其他題目:
\([SHOI2016]\) 黑暗前的幻想鄉(xiāng)
\([HEOI2015]\) 小Z的房間
\([FJOI2007]\) 輪狀病毒
\([JSOI2008]\) 最小生成樹計數(shù)
林下帶殘夢,葉飛時忽驚。
轉(zhuǎn)載于:https://www.cnblogs.com/nanjoqin/p/10368681.html
總結(jié)
以上是生活随笔為你收集整理的Matrix-tree 定理的一些整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Studio xml文件
- 下一篇: 网络:NAT使用场景