Matrix Determinant Lemma
设 \(\mathbf U\) 是 \(n\times m\) 阶矩阵,\(\mathbf V\) 是 \(m\times n\) 阶矩阵,\(\mathbf I_x\) 是 \(x\) 阶单位矩阵。
那么矩阵行列式引理的一个核心等式是: \(|\mathbf I_n+\mathbf U\mathbf V|=|\mathbf I_m+\mathbf V\mathbf U|\)。
证明考虑分块矩阵乘法,有等式:
这些矩阵都是分块三角矩阵,所以左边第一、三个矩阵行列式都是 \(1\),两边取行列式就得到了 \(|\mathbf I_n+\mathbf U\mathbf V|=|\mathbf I_m+\mathbf V\mathbf U|\)。
考虑拓展这个等式,对于可逆 \(n\) 阶方阵 \(\mathbf A\) 来说:
进一步地,对于可逆 \(m\) 阶方阵 \(\mathbf B\) 来说:
[PA2022] Drzewa rozpinające:
一张无向图,点 \(i\) 和点 \(j\) 之间连着 \(\gcd(a_i,a_j)\) 条边,求生成树个树。设 \(m=\max a_i\),则 \(n,m\le 5000\)。
首先这个题我以为是 gcd-matrix 那套理论,但是这个矩阵比起 gcd-matrix 来说中间修改了主对角线,所以说这个题得借助别的理论,也就是 Matrix Determinant Lemma。
本题相当于是对于 \(n-1\) 阶的对角矩阵 \(\mathbf D\) 和 gcd 矩阵 \(\mathbf G_{i,j}=\gcd(a_i,a_j)\),求 \(|\mathbf D-\mathbf G|\)。
对于 gcd 矩阵 \(\mathbf G\),考虑到 \(\gcd(a_i,a_j)=\sum_{d|a_i,d|a_j} \varphi(d)\),我们依旧是类似处理 gcd-matrix 的手法做矩阵分解,分解之后得到 \(\mathbf U_{i,j}=[j|a_i]\varphi(j),\mathbf V_{i,j}=[i|a_j],\mathbf G=\mathbf U \mathbf V\)。其中 \(\mathbf U\) 为 \((n-1)\times m\) 阶,\(\mathbf V\) 为 \(m\times (n-1)\) 阶。
分解之后运用矩阵行列式引理,有 \(|\mathbf D-\mathbf G|=|\mathbf D-\mathbf U\mathbf V|=|\mathbf D||\mathbf I_m-\mathbf V\mathbf D^{-1}\mathbf U|\)。
看起来还是要求行列式?注意到 \(|\mathbf I_m-\mathbf V\mathbf D^{-1}\mathbf U|\) 第 \(i\) 行 \(j\) 列的值是 \(\varphi(j)\sum_{i|a_k,j|a_k} \mathbf D_{k,k}^{-1}\),其只在 \(\operatorname{lcm}(i,j)\le m\) 的时候有值。这是稀疏矩阵,从 \(m\) 行到第 \(1\) 行依次消元,消元时只遍历有值的位置,复杂度就是玄学了!(你只需要实验一下 \(m=5000\) 时的运行速度就行了)
MDL 这个东西我觉得可以这样理解,众所周知矩阵数值算法中 LU 分解的作用可以与高斯消元互相替代,LU 分解问题、行列式问题、高斯消元问题、逆矩阵问题等等问题相互规约。当你把一个矩阵分解成 \(\mathbf M=\mathbf L\mathbf U\) 时,此时求行列式是简单的:\(|\mathbf M|=|\mathbf L||\mathbf U|=|\mathbf U||\mathbf L|\),这个想法的应用就是 gcd-matrix,也就是说 \(\mathbf G\) 的行列式很容易用莫反分解成两个三角矩阵。
但是有的时候,LU 分解并不足够有性质。我们考虑到当矩阵可以写成 \(\mathbf A+\mathbf U\mathbf V\) 这种形式,其中 \(\mathbf A\) 是一个好求逆的矩阵(常常是对角矩阵,这也就是为什么矩阵行列式引理常跟矩阵树定理配合使用),此时使用 MDL 可以把原行列式转变为另一个等难行列式(可以类比理解,这两个行列式互为一种“对偶问题”?),但是另一个行列式的结构更好观察,所以可以设计算法解决问题!
另一道在 rainbow 博客里看到的例题是 AGC060F:
[AGC060F] Spanning Trees of Interval Graph:
定义区间图为若两个区间相交则连一条边,对于定义在 \(n\) 个点上的所有区间 \([l,r]\),其在这张区间图的点集中 \(c_{l,r}\) 次。求这张区间图的生成树个数。\(n\le 400\)。
如果不是在 MDL 的博客里看到,我还以为是弦图理论……😓
对于 Laplace 矩阵 \(\mathbf D-\mathbf A\) 的行列式,依然是套路性地考虑分解 \(\mathbf A\)。我们可以用点减边来刻画有无交这个信息,设总点数为 \(S\),设计 \(S\times (2n-1)\) 阶矩阵 \(\mathbf U\) 和 \((2n-1)\times S\) 阶矩阵 \(\mathbf V\),表示 \(n\) 个点和 \(n-1\) 条边是否在这个区间中,然后要给边带上 \(-1\) 的系数,所以给 \(\mathbf V\) 矩阵的所有边代表的行系数取反。
运用矩阵行列式引理,发现题目就是让我们计算一个 \(2n-1\) 阶行列式。也就是说 MDL 将一个 \(S-1\) 阶的行列式计算问题变成了 \(2n-1\) 阶的行列式计算问题。