1. 程式人生 > >數學-Matrix Tree定理證明

數學-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}$ 也只可能為