容斥与反演

容斥与反演

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

反演

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

容斥原理

i=1nPi=S[n],S(1)|S|1jSPj

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

二项式反演

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

fi=j=in(ji)gjgi=j=in(1)ji(ji)fjfi=j=0i(ij)gjgi=j=0i(1)ij(ij)fj

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

Min-Max 容斥

maxiSai=TS,T(1)|T|1minjTajminiSai=TS,T(1)|T|1maxjTaj

前者构造集合 Pi={xai},后者构造 Pi={xai},就变成容斥原理了。
Min-Max 容斥一个很经典的使用是其期望形式,将一个集合最后出现的时间期望转化成第一个出现的时间期望。

扩展 Min-Max 容斥

一个自然的想法是如果我知道每个子集的最小值,我应该能知道第 k 大的元素值。
kthmax(S)=TS,Tf(|T|)min(T)f(|T|) 是容斥系数。
考虑第 i 大的元素的贡献:j=1i(i1j1)f(j)
我们希望构造 f,使得:[i=k]=j=1i(i1j1)f(j)
考虑做一点简单的变形:[i=k1]=j=0i(ij)f(j+1)
这明显是二项式反演的形式,对其进行二项式反演。

f(i+1)=j=0i(1)ij(ij)[j=k1]f(i+1)=(1)ik+1(ik1)f(i)=(1)ik(i1k1)

那么 kthmax-min 容斥即为:

kthmax(S)=TS,T(1)|T|k(|T|1k1)min(T)

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

gcd-lcm 容斥

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

lcm(S)=TS,Tgcd(T)(1)|T|1

斯特林反演

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

fi=j=in{ji}gjgi=j=in(1)ji[ji]fjfi=j=1i{ij}gjgi=j=1i(1)ij[ij]fj

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

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

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

其应用场景为限定所有元素两两不同,我们可以钦定等价类集合进行容斥。
记一个等价类集合为 S,其容斥系数为 (1)|S|1(S1)!,考虑证明。

考虑一个实际方案的等价类集合,我们希望一个实际等价类集合 S 的容斥系数和为 [|S|1],记 fi=[i1]
记钦定等价类集合 T 时的容斥系数为 g|T|,那么有 F(x)=expG(x),其中 F,G 为两个数列的 EGF。
可以得到 G(x)=lnF(x)=ln(1+x)=i=0(1)i1xii,即 gi=(1)i(i1)!

我们可以进一步利用集合划分容斥解决恰好 k 个等价类的问题,我们增加形式元 y 代表等价类个数,将上述容斥系数乘上 y,所求即为 yk 项系数,考虑插值,即可直接套用集合划分容斥。

例 PE495

n! 拆分成 k 个互不相同的正整数的乘积的方案数。
n104,k30

先将 n 以内的质数筛出,计算出每个质数在 n! 中的次数。
使用集合划分容斥处理两两不同的限制,由于等价类集合大小相同即可视为无区别,我们搜索划分数即可。
对于每个质数,使用计数背包将其指数划分至各个等价类中,乘上容斥系数计算方案数即可。

posted @   juju527  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示