1. 程式人生 > 其它 >矩陣樹定理 學習筆記

矩陣樹定理 學習筆記

全是在抄寫 czy 的課件,其實也不是很全面和嚴謹。

矩陣行列式

定義

矩陣 \(A\) 行列式記為 \(\det(A)\)\(|A|\)

\[\det(A)=\sum_{\text{$p$ 為 $1\dots n$ 的全排列}}(-1)^{\text{$p$ 的逆序對數}}\prod_{i}A_{i,p_i} \]

性質

  • \(A\) 中某一行(列)同乘 \(k\),行列式乘 \(k\)
  • \(\det(A)=\det(A^T)\)
  • \(A\) 交換兩行(列),行列式乘 \(-1\)
    因為交換兩行會使所有排列 \(p\) 逆序對數 \(+1\)\(-1\)
  • \(A\) 中存在兩行(列)相等,行列式為 \(0\)

    因為若 \(r_1,r_2\) 兩行相等,那麼包含 \(A_{r_1,i},A_{r_2,j}\) 的排列和包含 \(A_{r_1,j},A_{r_2,i}\) 的排列一一對應,乘積相等,符號相反。
  • \(A\) 中某一行(列)各元同乘一個數加到另一行(列)對應元上,行列式不變;
    因為行列式是關於某一行(列)的線性函式,在其它行不變的情況下,某一行相加,行列式也就相加;
    可以將 \(A'\) 拆分成 \(A\) 和一個行列式為 \(0\) 的矩陣的和。

約定與定義

  • 無向圖(有向圖)\(G=(V,E)\)
  • \(n=|V|\)\(m=|E|\)
  • 關聯矩陣 \(M(G)[n\times m]\)
\[M_{i,j}=\begin{cases} -1&\text{$v_i$ 是 $e_j$ 的起點}\\ 1&\text{$v_i$ 是 $e_j$ 的終點}\\ 0&\text{otherwise} \end{cases} \]

\(G\) 為無向圖時,每條邊是隨意定向的。

  • \(M\) 的簡約關聯矩陣 \(M_0[(n-1)\times m]\),是 \(M\) 去掉最後一行得到的。
  • \(M\) 的抽列矩陣 \(M_0(S)[(n-1)\times (n-1)]\),其中 \(S\subseteq E\) 是大小為 \(n-1\) 的邊集。
  • 拉普拉斯矩陣 \(L(G)[n\times n]\)
\[L_{i,j}=\begin{cases} -m_{i,j}&i\neq j,~\text{$i,j$ 之間有 $m_{i,j}$ 條邊}\\ \mathrm{deg}(v_i)&i=j \end{cases} \]

Lemma I

\[M\times M^T=L \]
\[\begin{aligned} (M\times M^T)_{i,j}&=\sum_k M_{i,k}\times M^T_{k,j}\\ &=\sum_k M_{i,k}\times M_{j,k} \end{aligned} \]
  • \(i\neq j\)\(M_{i,k}\times M_{j,k}=-1\times [e_k\in E]\),所以 \(\text{上式}=-m_{i,j}\)
  • \(i=j\)\(M_{i,k}\times M_{j,k}=(M_{i,k})^2=[e_k\in E]\),所以 \(\text{上式}=\mathrm{deg}(v_i)\)

Lemma II

\(S\subseteq E\)\(|S|=n-1\)\(G'=(V,S)\),則

\[\det(M_0(S))=\pm[\text{$G'$ 構成樹}] \]

\(G'\) 不構成樹,那麼 \(M_0\) 會存在若干列線性相關,行列式為 \(0\)

\(G'\) 構成樹:

取樹上的點拓撲排序後前 \(n-1\) 個點,記為 \(u_1,u_2\dots u_{n-1}\),以及其對應邊 \(c_1,c_2,\dots c_{n-1}\)

交換 \(M_0\) 的行,使得第一行對應 \(u_1\),第二行對應 \(u_2\)……

交換 \(M_0\) 的列,使得第一列對應 \(c_1\),第二列對應 \(c_2\)……

此時 \(M_0\) 變為下三角矩陣,主對角線乘積為 \(\pm 1\),行列式為 \(\pm 1\)

Binet-Cauchy 定理

\(A[n\times m],B[m\times n]\),則

\[\det(A\times B)=\sum_{\substack{S\subseteq \{1,2,\dots m\}\\|S|=n}}\det(A[S])\times\det(B[S]) \]

其中 \(A[S]\) 表示取出列集合為 \(S\) 的子矩陣,\(B[S]\) 表示取出行集合為 \(S\) 的子矩陣。

太頂了,看不懂證明。

特別地,當 \(A,B\) 是同階方陣時,\(\det(A\times B)=\det(A)\times \det(B)\)

矩陣樹定理

\(L_0\)\(L\) 去掉第 \(i\) 行第 \(i\) 列的子矩陣,那麼 \(G\) 的生成樹個數為 \(\det(L_0)\)

不妨令 \(i=n\),則 \(L_0=M_0\times M_0^T\)

\[\begin{aligned} \det(L_0)&=\det(M_0\times M_0^T)\\ &=\sum_{S}\det(M_0[S])\times\det(M_0^T[S])\\ &=\sum_{S}\det(M_0[S])^2\\ &=\sum_{S}[\text{$(V,S)$ 構成生成樹}] \end{aligned}\\ \]

應用

生成樹個數計數

\(L_0=\text{度數矩陣}-\text{鄰接矩陣}\)

有向圖:

  • 當度數矩陣中 \(\mathrm{deg}(u)\)\(u\) 的入度時,得到的時生成外向樹個數;
  • 當度數矩陣中 \(\mathrm{deg}(u)\)\(u\) 的出度時,得到的時生成內向樹個數;

求生成樹邊權積的和

將邊數改為這些邊的權值和。

求生成樹邊權和的和

我們目前只能求生成樹邊權乘積的總和,那麼就化和為積。

而多項式的性質就符合,在模 \(x^2\) 意義下,\(1\) 次多項式 \(ax+b\)\(cx+d\) 相乘,得到 \((ad+bc)x+bd\)。當 \(b=d=1\) 時,乘積結果多項式的 \(1\) 次項就是 \(a+c\)

所以我們讓兩個矩陣的元素都為 \(1\) 次多項式即可。

具體實現時,多項式的加、減和乘很好說,需要注意除法是 \(\dfrac{ax+b}{cx+d}=\dfrac{ad-bc}{d^2}x+\dfrac{b}{d}\)