容斥与反演
容斥与反演
感觉这部分内容的学习不够完备,进行一些系统性的总结。
反演
反演的本质是线性变换求逆。
考虑假设有 \(f_n=\sum_{i}a_{n,i}\times g_i\),已知 \(f\) 如何求 \(g\)?
显然可以写成矩阵乘向量的形式,即 \(F=AG\),那么 \(G=A^{-1}F\)。
理论上,只要 \(A\) 可逆,我们可以通过高斯消元在 \(O(n^3)\) 的代价下实现任意反演。
我们学习的所有反演其实都相当于掌握一些特殊矩阵的逆的性质,加速反演的过程。
典
容斥原理
求集合的交可以转化为求集合补集的并的补集。
二项式反演
有两种经典的二项式反演:
证明很简单,考虑把一个式子代进另一个式子进行组合恒等变形即可。
Min-Max 容斥
前者构造集合 \(P_i=\{x\leq a_i\}\),后者构造 \(P_i=\{x\geq a_i\}\),就变成容斥原理了。
Min-Max 容斥一个很经典的使用是其期望形式,将一个集合最后出现的时间期望转化成第一个出现的时间期望。
扩展 Min-Max 容斥
一个自然的想法是如果我知道每个子集的最小值,我应该能知道第 \(k\) 大的元素值。
\(kthmax(S)=\sum_{T\subset S,T\neq\varnothing}f(|T|)\min(T)\),\(f(|T|)\) 是容斥系数。
考虑第 \(i\) 大的元素的贡献:\(\sum_{j=1}^{i}\dbinom{i-1}{j-1}f(j)\)。
我们希望构造 \(f\),使得:\([i=k]=\sum_{j=1}^{i}\dbinom{i-1}{j-1}f(j)\)。
考虑做一点简单的变形:\([i=k-1]=\sum_{j=0}^{i}\dbinom{i}jf(j+1)\)。
这明显是二项式反演的形式,对其进行二项式反演。
那么 kthmax-min 容斥即为:
令人欣喜的是扩展 Min-Max 容斥在期望下也成立。
顺便一提,有了 kthmax 的式子,kthmin 就是小菜一碟了。
gcd-lcm 容斥
将 min-max 容斥在数论中运用,从素数分解的角度来看待一个数,gcd 即为每一维向量取 min 的结果,lcm 即为 max。
套用 Min-Max 容斥,可以得到:
斯特林反演
与二项式反演类似,斯特林反演也存在两种经典形式:
斯特林反演的证明较为麻烦,需要使用反转公式,限于篇幅不展开证明。
集合划分容斥(广义斯特林反演)
这东西似乎也被称为广义斯特林反演,斯特林反演是集合划分容斥的一个特例。
集合划分容斥之于斯特林反演,类似于容斥原理之于二项式反演。
其应用场景为限定所有元素两两不同,我们可以钦定等价类集合进行容斥。
记一个等价类集合为 \(S\),其容斥系数为 \((-1)^{|S|-1}(S-1)!\),考虑证明。
考虑一个实际方案的等价类集合,我们希望一个实际等价类集合 \(S\) 的容斥系数和为 \([|S|\leq1]\),记 \(f_i=[i\leq 1]\)。
记钦定等价类集合 \(T\) 时的容斥系数为 \(g_{|T|}\),那么有 \(F(x)=\exp G(x)\),其中 \(F,G\) 为两个数列的 EGF。
可以得到 \(G(x)=\ln F(x)=\ln(1+x)=\sum_{i=0}(-1)^{i-1}\dfrac{x^i}{i}\),即 \(g_i=(-1)^i(i-1)!\)。
我们可以进一步利用集合划分容斥解决恰好 \(k\) 个等价类的问题,我们增加形式元 \(y\) 代表等价类个数,将上述容斥系数乘上 \(y\),所求即为 \(y^k\) 项系数,考虑插值,即可直接套用集合划分容斥。
例 PE495
将 \(n!\) 拆分成 \(k\) 个互不相同的正整数的乘积的方案数。
\(n\leq 10^4,k\leq 30\)
先将 \(n\) 以内的质数筛出,计算出每个质数在 \(n!\) 中的次数。
使用集合划分容斥处理两两不同的限制,由于等价类集合大小相同即可视为无区别,我们搜索划分数即可。
对于每个质数,使用计数背包将其指数划分至各个等价类中,乘上容斥系数计算方案数即可。