老久没更了,冬令营也延期了(延期后岂不是志愿者得上学了?)
最近把之前欠了好久的债,诸如FFT和Matrix-Tree等的搞清楚了(啊我承认之前只会用,没有理解证明……),FFT老多人写,而MatrixTree没人证我就写一下吧……
Matrix Tree的结论网上可多,大概一条主要的就是,图中生成树的数量等于 \(V-E\) 的任一余子式,其中:
这个结论众人皆知,但我好像没怎么搜到证明?
为了求无向图中有多少组 \(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\)。
有两种理解方式:
这下从行列两个方向证明了这个结论,但有何用处呢?
我们刚在从列的方向证明结论时用到了“生成树”的概念,仔细考虑一下,求“图中有多少种 \(n-1\) 条边的组合没有环”,等价于求“关联矩阵中有多少种 \(n-1\) 列的组合线性无关”
同时我们证明了 \(n\) 个行中总有一个是多余的,故考虑删去其中一行对答案无影响。
这下将图中的问题转化为了矩阵中的问题,但是否将过程复杂化了呢?
为了解决这个问题,我们需要引入 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\) 中下标的行组成的矩阵)
可以发现其中几种特殊情况:
这个公式的证明过于繁琐,不予展开,但可以感性理解:\(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}\):
回顾整个过程:
问题一开始是“有多少种选取 \(n-1\) 条边的方式,使选出的边构成树”
考虑 \(AB=DD^T\) 的现实意义,得到开头提到的Matrix Tree定理
刚才讨论的都是无向生成树,可以考虑到有向生成树的情况:
考虑外向生成树关联矩阵的特点:除了根以外每一行都只有一个 \(-1\)(树上只有一个父亲)
而若生成树不是外向生成树,则一定存在一个点 \(x\),关联矩阵中 \(x\) 对应的那一行没有 \(-1\)
所以可以考虑将原来每条边“一个 \(+1\) 一个 \(-1\)”中的 \(+1\) 置为零,则在计算时:
原文:https://www.cnblogs.com/penth/p/12511855.html