LU 分解及 Matrix determinant lemma
LU 分解
对于一个矩阵 \(\mathbf A\),求出 \(\mathbf A=\mathbf {LU}\),其中 \(\mathbf L\) 是下三角矩阵,\(\mathbf U\) 是上三角矩阵的过程称为 LU 分解。
一般矩阵的 LU 分解可以消成行列式的同时记录逆矩阵,复杂度同高斯消元。
一个比较好的性质是 \(|\mathbf A|=|\mathbf L||\mathbf U|\),如果能利用 \(\mathbf A\) 的特殊性质快速分解出来,因为 \(|\mathbf L|,|\mathbf U|\) 就是对角线乘积,所以 \(|\mathbf A|\) 可以快速计算。
比如 \(\mathbf A_{i,j}=\gcd(i,j)\)。
对其施以欧拉反演,可以得到 \(\mathbf A_{i,j}=\sum\limits_{d\mid \gcd(i,j)}\varphi(d)\)。
则可以拆成两个矩阵:\(\mathbf L_{i,j}=[j\mid i]\varphi(j),\mathbf U_{i,j}=[i\mid j]\),则容易验证 \(\mathbf A=\mathbf L\mathbf U\),且 \(\mathbf L,\mathbf U\) 满足三角矩阵条件。因此 \(|\mathbf A|=\prod\limits_{i=1}^{n}\varphi(i)\)。
进一步的,如果 \(\mathbf A_{i,j}=f(\gcd(i,j))\),则对于满足 \(f_i=\sum\limits_{j\mid i}g_j\),即 \(g\) 为 \(f\) 的高维差分,\(|\mathbf A|=\prod\limits_{i=1}^{n}g(i)\)。
Matrix determinant lemma
记 \(\mathbf{U}\) 为 \(n\times m\) 的矩阵,\(\mathbf{V}\) 为 \(m\times n\) 的矩阵,\(\mathbf{I}_x\) 为 \(x\) 阶单位矩阵。
主要定理是:
证明可以考虑构造矩阵相乘:
对两边取行列式即可。
将其扩展到一般的情况,令 \(A\) 为 \(n\times n\) 矩阵,则有
假设我们要求的是一个形如 \(|\mathbf{D}-\mathbf{G}|\) 的行列式,且 \(\mathbf{G}=\mathbf{UV}\),\(\mathbf D\) 易求行列式和逆,则 MDL 的最大作用是将 \(\mathbf{G}\) 原本隐藏在这个乘法里的性质显露出来。一个简单的应用例子:如果 \(m\) 远小于 \(n\),则现在只需要做一次 \(m\times n\times m\) 的矩阵乘法并对一个阶为 \(m\) 的矩阵求行列式,而不是原来的 \(n\times m\times n\) 的矩阵乘法以及阶为 \(n\) 的矩阵求行列式。
其相比于 LU 分解来说不要求分解出来的一定是两个对角矩阵,适用性更加广泛,但是性质要弱一点。
PA 2022 Drzewa rozpinające
使用矩阵树定理,我们要求的值即为 \(|\mathbf{D}-\mathbf{G}|\),其中 \(\mathbf D\) 为度数矩阵,\(\mathbf G\) 为邻接矩阵。
\(\mathbf D\) 容易计算,并且由于其为对角矩阵,逆和行列式都容易计算。考虑仍然对 \(\mathbf G\) 施以欧拉反演,可以构造出两个 \(n\times m\) 的矩阵 \(\mathbf U_{i,j}=[j\mid a_i]\varphi(j),\mathbf V_{i,j}=[i\mid a_j]\),满足 \(\mathbf G=\mathbf U \mathbf V\)。
使用 MDL,可以得到我们要求的就是 \(|\mathbf D||\mathbf I_n+\mathbf V\mathbf A^{-1}\mathbf U|\)。
你说得对,但是这看上去还是要求阶为 \(5000\) 矩阵的行列式啊?
考虑矩阵 \(\mathbf V\mathbf A^{-1}\mathbf U\) 的实际意义,会发现只有 \(\operatorname{lcm}(i,j)\leq m\) 的位置有值,因此这个矩阵非常稀疏,且值主要集中在上方的一个类似于反比例函数的区域,所以从下到上消元速度非常快。时间复杂度可以(?)看作 \(O(n^2)\) 的。
AGC060F Spanning Trees of Interval Graph
使用矩阵树定理,直接求行列式需要对一个很大的矩阵消元,爆了。
发现可以使用点减边容斥计算这个 \(\mathbf G\),这样的话使用 MDL 之后就只需要对一个阶 \(2n-1\) 的矩阵求行列式,于是就对完了。
\(\mathbf D,\mathbf V\mathbf A^{-1}\mathbf U\) 均容易根据实际意义二维前缀和求得,时间复杂度 \(O(n^3)\)。