前言
这只是一个比较基础的容斥/反演学习笔记。
包含了一大堆锅一些反演的基础知识点和证明过程。
如有不足之处希望大佬多加指点。
反演的定义和反演算法的基本原理
假设有两个函数(f(x))和(g(x))满足$$f(n) = sum_{k} a_{n, k} g(k)$$
已知(f)求(g)的过程就叫做反演。
现在假设我们已经求出了(g)关于(f)的表达式$$g(n)=sum_{k}mu(n,k)f(k)$$
代入前式,我们有$$f(n)=sum_{k}a_{n,k}sum_{m}mu(k,m)f(m)=sum_{m}f(m)sum_{k}a_{n,k}mu(k,m)$$
那么只需要(sum_{k}a_{n,k}mu(k,m)=[n=m])即可。
可以通过矩阵求逆直接求解(mu(n,m))。
一些具有特殊系数的求和式,其(mu)可以快速求出,为解题提供思路。
求反演式时,一般根据题意设(g(n)sum_{m}[n=m]g(m)),然后将([n=m])表达的式子代入求解,
整理后根据(f)对(g)的关系式代入(f(m))即求解完成。
二项式反演
我们知道(sum_{i=0}^{n}(-1)^iinom{i}{n}=[n=0]),那么由于([n=m]=[n-m=0]),
那么从求和式开始变换:
于是有$$g(n)=sum_{k=0}{n}(-1){n-k}inom{n}{k}f(k)$$
这个过程其实就是在说明:$$sum_{m=k}{n}(-1){m-k}inom{n}{m}inom{m}{k}=[n=k]$$
子集反演
由(sum_{i=0}^{n}(-1)^iinom{i}{n}=[n=0])可以知道(sum_{Tsubseteq S}(-1)^{|T|}=[S=0]),这里(0)表示空集。
于是有$$g(S)=sum_{Tsubseteq S}(-1)^{|S|-|T|}f(T)$$
这个过程其实就是在说明:$$sum_{Tsubseteq Qsubseteq S}(-1)^{|Q|-|T|}=[S=T]$$
多重子集反演
现在(S,T)变成了多重集。
定义(varphi(S)),当(S)中包含重复元素时为(0),不包含时为((-1)^{|S|})。
那么同样有(sum_{Tsubseteq S}varphi(|T|)=[S=0])。
类似上面的变换,可以得到$$g(S)=sum_{Tsubseteq S}varphi(S-T)f(T)$$
反方向的子集反演
于是有
子集卷积
对于子集反演,限制集合的大小进行转移即可。
简而言之,因为之前反方向的子集反演,我们可以处理出
但如果直接照搬,会出现(p,q)有交的情况
因此需要限制集合大小,即求(sum_{|r|=k}c_r)时,
对于(p,q)需要有(p or q)且(|p|+|q|=|r|)。
那么对于一类大小为(i)集合地进行(i)次这样的运算即可。故时间复杂度为(O(n^2logn))。
莫比乌斯反演
因为每个正整数都能根据质因子分解对应一个质数的多重集,你会发现这其实就是子集反演。
于是你突然发现再证下去没意思了
那么定义(mu(n)),当(n)分解出重复质因数时为(0),否则为((-1)^p),其中(p)为质因子个数...
于是有(sum_{d|n}mu(n)=[n=1])。
于是有
反方向的莫比乌斯反演
反方向的多重子集反演。
单位根反演(离散傅里叶变换)
egin{aligned}
f(n)&=sum_{k=0}{m-1}epsilon{nk}g(k)
g(n)&=frac{1}{m}sum_{k=0}{m-1}epsilon{-nk}f(k)
end{aligned}
其中(epsilon=e^{-frac{2pi i}{m}})为(m)次单位根,即(epsilon^m=1);
本人线代太差,不会刚这个式子。有兴趣的大佬可以去这位神仙的博客看看。
这里反演的直接意义是(DFT)和(IDFT)。
还有一个这样的式子:
证明:当(n mod m ot= 0)时原式(=frac{epsilon^{nm}-1}{epsilon^n-1}=0),当(m|n)时(epsilon^n=1)。
斯特林反演
根据上面的反演条件,我们只须考虑证明
这个公式叫做反转公式...
这个式子还有另一个形式,即$$sum_{m=k}{n}(-1){m-k}egin{bmatrix}nm\end{bmatrix}egin{Bmatrix}mk\end{Bmatrix}=[n=k]$$
也就是说,斯特林反演包含了不同方向的反演。
为表示简洁,这里只证其中一个。
我们考虑两类斯特林数和下降幂,上升幂的关系:
其中(n^{underline{k}})表示(n)的(k)阶下降幂,(n^{overline{k}})表示(n)的(k)阶上升幂。
第一个式子由组合意义立得。使用数学归纳法证明第二个式子:
证毕。
此时可以证明反转公式:
于是有(sum_{k=i}^{m}egin{Bmatrix}m\k\end{Bmatrix}egin{bmatrix}k\i\end{bmatrix}(-1)^{k-i}=[m=i])。证毕。
反转公式证明完毕,则斯特林反演的正确性也随之得到证明。
Min-max容斥(最值反演)
根据上面的定义,严格的说这玩意应该不属于反演,但它是非常重要的。
在期望中的应用
假设(S)中的元素都是随机变量,两边求期望并根据期望的线性性可以得到$$E(max{S})=sum_{Tin S}(-1)^{|T|-1}E(min{T})$$假设这些随机变量表示一个元素出现的期望时间,且元素之间相互独立。
那么(max{S})表示S中所有元素至少出现一次的期望时间,
(min{S})表示S中至少出现一个元素的期望时间
一般而言(min{S})好求而(max{S})难求,此时通过最值反演即可解决问题。
Min-max容斥的一个扩展:k-min-max容斥
我们定义一个容斥系数(f(x)),使得
由于是线性变换,假设(|T|=x+1),考虑(min{T})对答案的贡献,为(sum_{i=0}^{x}inom{x}{i}f(i+1))。
于是有$$[x=k-1]=sum_{i=0}^{x}inom{x}{i}f(i+1)$$
二项式反演可以得到:$$f(x+1)=sum_{i=0}{x}(-1){x-i}inom{x}{i}[i=k-1]=(-1)^{x-k+1}inom{x}{k-1}$$
于是容斥系数(f(x)=(-1)^{x-k}inom{x-1}{k-1})
因此$$kmax{S}=sum_{Tin S}(-1)^{|T|-k}inom{|T|-1}{k-1}min{T}$$
参考资料:
炫酷反演魔术
斯特林数-斯特林反演
min-max容斥及其推广