數學-Matrix Tree定理證明


老久沒更了,冬令營也延期了(延期后豈不是志願者得上學了?)

最近把之前欠了好久的債,諸如FFT和Matrix-Tree等的搞清楚了(啊我承認之前只會用,沒有理解證明……),FFT老多人寫,而MatrixTree沒人證我就寫一下吧……

Matrix Tree結論

Matrix Tree的結論網上可多,大概一條主要的就是,圖中生成樹的數量等於 \(V-E\) 的任一余子式,其中:

  • \(V\) 為對角陣,第 \(i\) 個元素為點 \(i\) 的度數
  • \(E\) 為對稱陣,對角線為零且 \(E_{i,j}\) 為點 \(i\) 與點 \(j\) 之間邊的數量的相反數

圖的關聯矩陣

為了求無向圖中有多少組 \(n-1\) 條邊可以形成樹,一般需要枚舉所有的可能,無法在多項式內解決,但我們利用數學工具將其轉換——引入關聯矩陣

為了后面討論我們給每條邊隨意分配一個方向。

圖的鄰接矩陣是一個 \(n\times n\) 的用於存儲圖的矩陣。而關聯矩陣 \(A\) 則為 \(n\times m\) 的矩陣,其中行對應點,列對應邊,如果 \(A_{i,j}\) 非零,則說明第 \(j\) 條邊的起點或終點為點 \(i\)(如 \(i\) 為起點則為 \(+1\),終點則為 \(-1\),否則為 \(0\))。如下圖即為一張 \(4\)\(5\) 邊的圖的關聯矩陣:

\[\begin{bmatrix} +1 & -1 & +1 & 0 & 0\\ -1 & 0 & 0 & +1 & -1\\ 0 & +1 & 0 & -1 & 0\\ 0 & 0 & -1 & 0 & +1 \end{bmatrix} \]

可以看到,如果只考慮這張圖的結構的話,關聯矩陣的行之間或列之間隨意交換都是無所謂的(行交換代表點重新編號……)


我們可以證明一個結論,任意連通圖的關聯矩陣秩為 \(n-1\)

有兩種理解方式:

  • 按行來看:
    • 首先去掉任意一行都是可以復原的:因為每一列都是一個 \(+1\) 一個 \(-1\),可以輕松由其他 \(n-1\) 行得到這一行。故去掉任意一行不會丟失信息,秩 \(\le n-1\)
    • 其次去掉任意兩行都是無法復原的:因為任意去掉兩行 \(x,y\),在這張連通圖上找到一條 \(x\)\(y\) 的路徑,取其中 \(x\to y\) 方向第一條邊 \(a\)\(y\to x\) 方向第一條邊 \(b\),則在還原關聯矩陣時無法確定非零位置是 \((x,a)\&(y,b)\) 還是 \((x,b)\&(y,a)\)。故去掉任意兩行都會丟失信息,秩 \(\ge n-1\)
  • 再按列來看更為顯然:
    • 由於列對應邊,故選取若干列,若這些列對應的邊在圖上組成了環,則一定線性相關(因為將環按一個方向捋一遍然后加起來一定為零)
    • 故要求“最多的線性無關的列”,也即求“在不出現環的前提下最多能找出多少邊”,答案顯然為 \(n-1\)

這下從行列兩個方向證明了這個結論,但有何用處呢?

我們剛在從列的方向證明結論時用到了“生成樹”的概念,仔細考慮一下,求“圖中有多少種 \(n-1\) 條邊的組合沒有環”,等價於求“關聯矩陣中有多少種 \(n-1\) 列的組合線性無關

同時我們證明了 \(n\) 個行中總有一個是多余的,故考慮刪去其中一行對答案無影響。

這下將圖中的問題轉化為了矩陣中的問題,但是否將過程復雜化了呢?

Binet-Cauchy公式

為了解決這個問題,我們需要引入 Binet-Cauchy公式:

若存在 \(n\times m\) 的矩陣 \(A\)\(m\times n\) 的矩陣 \(B\),則矩陣 \(AB\) 的行列式等於:從 \(m\) 中任意選取 \(n-1\) 個指標,並取出 \(A\) 的這 \(n\) 列得到 \(A'\),和 \(B\) 的這 \(n\) 行的得到 \(B'\),將它們行列式乘起來得到 \(\det A'\times \det B'\),對所有共 \(C_m^n\) 種選取情況求和。

數學表達:

\[\det (AB)=\sum_{S\sube U,|S|=n}\det(A_S)\det(B_S) \]

(其中 \(U\) 表示集合 \(\{1,2,\dots,m\}\)\(A_S\) 表示取出 \(S\) 中下標的列組成的矩陣,\(B_S\) 表示取出 \(S\) 中下標的行組成的矩陣)

可以發現其中幾種特殊情況:

  • \(n=1\):此時公式等價於計算兩個 \(m\) 維向量的點積
  • \(n=m\):此時公式等價於表示 \(\det(AB)=\det(A)\det(B)\) 的行列式可乘性質
  • \(n>m\):此時公式中由於無法選出任何一組,故右邊恆等於 \(0\),其表達的其實是矩陣 \(AB\) 不滿秩

這個公式的證明過於繁瑣,不予展開,但可以感性理解:\(AB\)\(A\) 的以 \(B\) 為系數的線性組合,將 \(AB\) 的行列式展開后分離貢獻,\(\det (A_S)\) 的系數是 \(\det(B_S)\)

利用公式

為了解決這個問題引入這個公式,很明顯是和其中的共同擁有的“任意選取”、“線性無關”兩個因素有關。

很容易想到是想要將圖的關聯矩陣 \(D\)(去掉一行后)放入 \(A\)\(B\) 的位置,但具體怎么放,另一個矩陣又是什么?

引理:連通圖的關聯矩陣中,任意一個子矩陣的行列式都為 \(\pm 1\)\(0\)

證明:

  • 若子矩陣不可逆,則行列式自然為零
  • 若子矩陣可逆,則不可能每一列都同時存在兩個非零項(否則每一列都是一個 \(+1\) 一個 \(-1\),將所有行加起來一定是 \(0\)),故按只有一個非零項的列進行行列式展開,則可以歸納至低一階的情況

有了這個引理,可以非常自然的考慮將 \(A\) 設為 \(D\)\(B\) 設為 \(D^T\),則 \(A_S\)\(B_S\) 都是取 \(D\) 的不同列向量組成的矩陣。

由於我們證明了,列線性無關的子矩陣行列式一定為 \(\pm 1\),則平方后一定為 \(1\)。再利用上述公式,故原問題的的答案即為 \(\det (AB)\)


至於 \(AB\) 是啥?\(AB=DD^T\)

考慮下關聯矩陣 \(D\) 的定義,即可發現 \((AB)_{i,j}\)

  • \(i=j\) 時:\((AB)_{i,i}\)\(D\)\(i\) 行與自己的點積,由於非零項都為 \(\pm 1\),則 \((AB)_{i,i}\) 即為第 \(i\) 行的非零項個數——即點 \(i\) 的度數
  • \(i\ne j\) 時:\((AB)_{i,j}\)\(D\)\(i\) 行與 \(j\) 的點積,由於每一列都只有兩個元素(一個 \(+1\) 一個 \(-1\)),故每個位置如果有值,則一定為 \(-1\)\((AB)_{i,j}\) 即為它們求和——點 \(i\) 與點 \(j\) 之間邊的數量的相反數

總結

回顧整個過程:

  • 問題一開始是“有多少種選取 \(n-1\) 條邊的方式,使選出的邊構成樹

  • 然后引入圖的關聯矩陣,證明了其秩為 \(n-1\),同時也發現問題等價於“有多少種在關聯矩陣中選取 \(n-1\) 列的方式,使選出的列線性無關”(同時發現刪去關聯矩陣任意一行對答案無影響)

  • 針對“任意選取”和“線性無關”兩個特點,引入了同樣擁有這兩個特點的 Binet-Cauchy公式

    • 利用 Binet-Cauchy任意選取的特點,和“線性無關\(\iff\) 行列式非零”的性質,希望將關聯矩陣放入公式
  • 為了將關聯矩陣放入公式,證明了關聯矩陣中任意一個子矩陣行列式為 \(\pm 1\)\(0\)

  • 巧妙地將 \(A\) 設為 \(D\)\(B\) 設為 \(D^T\),則得到的結果 \(\det(AB)\)

    • 等價於:任取 \(D\)\(n-1\) 列求出行列式,平方后求和。
    • 等價於:任取 \(D\)\(n-1\) 列,行列式非零的方案數
  • 考慮 \(AB=DD^T\) 的現實意義,得到開頭提到的Matrix Tree定理

有向生成樹的擴展

剛才討論的都是無向生成樹,可以考慮到有向生成樹的情況:

  • 由於點可以重新標號,我們只考慮以 \(1\) 號點為根的情況
  • 由於內向生成樹可以將邊取反后求外向生成樹,故只考慮外向生成樹的情況

考慮外向生成樹關聯矩陣的特點:除了根以外每一行都只有一個 \(-1\)(樹上只有一個父親)

而若生成樹不是外向生成樹,則一定存在一個點 \(x\),關聯矩陣中 \(x\) 對應的那一行沒有 \(-1\)

所以可以考慮將原來每條邊“一個 \(+1\) 一個 \(-1\)”中的 \(+1\) 置為零,則在計算時:

  • 如果這棵生成樹不是外向生成樹,則一定存在一行全為零,其行列式也為零
  • 如果這棵樹是外向生成樹,由於每一行有一個 \(-1\),故其行列式為 \((-1)^{n-1}\) 也只可能為 \(\pm 1\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM