簡單入門一下矩陣樹Matrix-Tree定理。(本篇目不涉及矩陣樹相關證實)html
一些定義與定理優化
基爾霍夫Kirchhoff矩陣 K =度數矩陣 D - 鄰接矩陣 Aspa
基爾霍夫Kirchhoff矩陣的具體構造htm
$D[i][j]=0\;{(i}\neq{j)}$,$D[i][i]=i號點的度數$blog
${A[i][i]=0}\;{,}\;{A[i][j]=A[j][i]=i,j之間的邊數}$get
行列式det(K)求法it
行列式的性質入門
這個須要簡單說明一下。方法
考慮對於原矩陣 K,咱們能夠獲得其行列式的求和式:im
${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()求和式的對應的每一項的符號位都相反,因此互換矩陣的兩行(列),行列式變號。
(有了這個性質,下面的就比較簡單了。)
證實,由性質.1可知:由於交換這兩行,獲得的矩陣和原來相同,可是又要變號,則行列式的值只能爲 0。
這個的證實就是把那個求和式的每一項都提出一個公因子k就行了。
證實:也是把其中一行提出一個公因數k,那麼剩下的det( )求和式所表明的矩陣中存在一行或一列徹底相同,則值爲 0。
證實:能夠從求和式子的每一項的那一行的那個元素下手,
把det( )求和式拆成兩個 det( )求和式:
det1( )與原矩陣的行列式求法相同
det2( )所表明的矩陣中有兩行成比例,比例係數爲k,值爲0 。
因此相比原來的行列式,值不變。
優化行列式的求法
注意到了麼,是一個上三角矩陣(左下半部分的元素值爲 0)。
其行列式的值爲對角線的乘積,(同理下三角矩陣)
由於只有 P = 1 2 3 4 時,乘積項中才沒有 0出現。
若是要求的矩陣不容許出現實數,且須要取模。
則採用展轉相除的高斯消元法。時間複雜度多一個 O(logN)