容斥与反演

容斥与反演

感觉这部分内容的学习不够完备,进行一些系统性的总结。

反演

反演的本质是线性变换求逆。
考虑假设有 \(f_n=\sum_{i}a_{n,i}\times g_i\),已知 \(f\) 如何求 \(g\)
显然可以写成矩阵乘向量的形式,即 \(F=AG\),那么 \(G=A^{-1}F\)
理论上,只要 \(A\) 可逆,我们可以通过高斯消元在 \(O(n^3)\) 的代价下实现任意反演。
我们学习的所有反演其实都相当于掌握一些特殊矩阵的逆的性质,加速反演的过程。

容斥原理

\[\cup_{i=1}^nP_i=\sum_{S\in [n],S\neq \varnothing}(-1)^{|S|-1}\cap_{j\in S}P_j \]

求集合的交可以转化为求集合补集的并的补集。

二项式反演

有两种经典的二项式反演:

\[f_i=\sum_{j=i}^n\binom j i g_j \longleftrightarrow g_i=\sum_{j=i}^n(-1)^{j-i}\binom j if_j\\ f_i=\sum_{j=0}^i\binom i j g_j \longleftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}\binom i jf_j \]

证明很简单,考虑把一个式子代进另一个式子进行组合恒等变形即可。

Min-Max 容斥

\[\max_{i\in S}a_i=\sum_{T\subset S,T\neq \varnothing}(-1)^{|T|-1}\min_{j\in T}a_j\\\min_{i\in S}a_i=\sum_{T\subset S,T\neq \varnothing}(-1)^{|T|-1}\max_{j\in T}a_j \]

前者构造集合 \(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)\)
这明显是二项式反演的形式,对其进行二项式反演。

\[f(i+1)=\sum_{j=0}^{i}(-1)^{i-j}\binom i j[j=k-1]\\f(i+1)=(-1)^{i-k+1}\binom i{k-1}\\f(i)=(-1)^{i-k}\binom{i-1}{k-1} \]

那么 kthmax-min 容斥即为:

\[kthmax(S)=\sum_{T\subset S,T\neq\varnothing}(-1)^{|T|-k}\binom{|T|-1}{k-1}\min(T) \]

令人欣喜的是扩展 Min-Max 容斥在期望下也成立。
顺便一提,有了 kthmax 的式子,kthmin 就是小菜一碟了。

gcd-lcm 容斥

将 min-max 容斥在数论中运用,从素数分解的角度来看待一个数,gcd 即为每一维向量取 min 的结果,lcm 即为 max。
套用 Min-Max 容斥,可以得到:

\[\operatorname{lcm}(S)=\prod_{T\subset S,T\neq \varnothing}\gcd(T)^{(-1)^{|T|-1}} \]

斯特林反演

与二项式反演类似,斯特林反演也存在两种经典形式:

\[f_i=\sum_{j=i}^n {j\brace i}g_j\longleftrightarrow g_i=\sum_{j=i}^n(-1)^{j-i}{j\brack i}f_j\\ f_i=\sum_{j=1}^i {i\brace j}g_j\longleftrightarrow g_i=\sum_{j=1}^i(-1)^{i-j}{i\brack j}f_j \]

斯特林反演的证明较为麻烦,需要使用反转公式,限于篇幅不展开证明。

集合划分容斥(广义斯特林反演)

这东西似乎也被称为广义斯特林反演,斯特林反演是集合划分容斥的一个特例。
集合划分容斥之于斯特林反演,类似于容斥原理之于二项式反演。

其应用场景为限定所有元素两两不同,我们可以钦定等价类集合进行容斥。
记一个等价类集合为 \(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!\) 中的次数。
使用集合划分容斥处理两两不同的限制,由于等价类集合大小相同即可视为无区别,我们搜索划分数即可。
对于每个质数,使用计数背包将其指数划分至各个等价类中,乘上容斥系数计算方案数即可。

posted @ 2022-08-01 19:37  juju527  阅读(189)  评论(0编辑  收藏  举报