數學-Matrix Tree定理證明
阿新 • • 發佈:2020-03-17
老久沒更了,冬令營也延期了(延期後豈不是志願者得上學了?)
最近把之前欠了好久的債,諸如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}$ 也只可能為