Min-Max 容斥学习笔记

Min-Max 容斥学习笔记

概念

Min-Max 容斥,又称最值反演,是一种对于特定集合,在已知最小值或最大值中一者的情况下,求另一种的算法。首先观察几个式子:

max(a)=amax(a,b)=a+bmin(a,b)max(a,b,c)=a+b+cmin(a,b)min(b,c)min(a,c)+min(a,b,c)

显然对所有数取相反数,易知用最大值求最小值的公式与用最小值求最大值的公式形式相同,故以下只探讨用最小值求最大值。通过观察可以写出以下式子

Max(S)=TS,T(1)|T|1Min(T)

其中 Max(S) 表示集合 S 中元素的最大值,Min(S) 表示集合 S 中元素的最小值。

证明

设存在一个以集合大小为自变量的函数 f 满足 Max(S)=TS,Tf(|T|)Min(T),并记 S 中元素从大到小排列为 x1,x2,,xm,则对于 xi,其在左侧的贡献次数为 [i=1],在右侧的贡献次数为 j=0i1(i1j)f(j+1)。若等式成立,则必有

[i=1]=j=0i1(i1j)f(j+1)

F(i)=[i+1=1],G(i)=f(i+1),则

F(i)=j=0i(ij)G(j)

对这个式子进行二项式反演,得到

G(i)=j=0i(1)ij(ij)F(j)=(1)i

所以 f(i)=G(i1)=(1)i1,于是有

Max(S)=TS,T(1)|T|1Min(T)

拓展

kMax(S) 表示集合 Sk 大值,则

kMax(S)=T\subS,|T|k(1)|T|k(|T|1k1)Min(T)

证明

设存在一个以集合大小为自变量的函数 g 满足 kMax(S)=T\subS,Tg(|T|)Min(T),并记 S 中元素从大到小排列为 x1,x2,,xm,则对于 xi,其在左侧的贡献次数为 [i=k],在右侧的贡献次数为 j=0i1(i1j)g(j+1),若等式成立,则必有

[i=k]=j=0i1(i1j)g(j+1)

F(i)=[i+1=k],G(i)=g(i+1),则

F(i)=j=0i(ij)G(i)

进行二项式反演可得

G(i)=j=0i(1)ij(ij)F(j)=(1)ik+1(ik1)

g(i)=G(i1)=(1)ik(i1k1),于是有

kMax(S)=T\subS,|T|k(1)|T|k(|T|1k1)Min(T)

应用

Min-Max 容斥常见于期望问题,具体表现为所有元素均出现的期望时间。记 ti 表示第 i 个元素的出现时间,则 Max(S) 表示所有元素出现时间的最大值,即所有元素都出现的时间,而 Min(S) 表示所有元素出现时间的最小值,即至少一个元素出现的时间。根据 Min-Max 容斥,有

Max(S)=T\subS,T(1)|T|1Min(T)

对左右两边同时取期望,因为期望是线性的,所有可以放到求和里,即

E(Max(S))=T\subS,T(1)|T|1E(Min(T))

容易发现 E(Min(T)) 是好求的,当单位时间出现 T 中至少一个的概率为 p,则出现 T 中至少一个的期望时间为 1p。于是容易求出 E(Max(S)),即所有元素都出现的期望时间。

同时,在数论题目中,可以考虑到 lcm 相当于将所有数的质因子的指数取 max,而 gcd 则相当于取 min,因此在同时出现 lcmgcd 的题目中也应当想到如此转换。

posted @   DycIsMyName  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示