容斥原理与反演相关

目录

一些容斥原理

规定

本文中集合指代非可重集。

用大写字母记一个集合,例如 P,S
在集合两侧加竖线表示集合的大小,例如 |{1,2,3,4,5}|=5
在有上下文信息的情况下,直接写出集合也可以表示该集合对应的一类贡献,其与集合内元素线性相关。

下文中在描述下标集合时常会看到 S,T 这两个用于枚举的中间量集合,这里记 S 表示下标全集,T 表示当前枚举到的 S 的一个子集。
规定 00=1,这也是有实际意义的。

容斥原理

就是最普适的容斥原理了。我们需要计算一系列集合的并,但又不希望重叠部分的贡献计入多次,这时就需要通过多次计数,每次[把先前没有计算的部分容纳进来/把先前重复计算的部分排斥出去],定量地加以容斥系数来实现不重不漏的计数,这样的做法就叫容斥原理。

假设我们需要计数集合列 Pn 的贡献,容易得到

iSPi=TS(1)|T|1jTPj

该式子描述了容斥原理的核心,其他的容斥可以说都是从这个式子上衍生的。

证明也是比较方便的。考虑一个元素在集合列中的 m 个集合中出现,则可以发现,选择 k 个其出现的集合有 Cmk 种可能,每种可能的系数是 (1)k1。最后能写出

i=1m(1)i1(mi)=(m0)(11)m=1

也可以通过归纳法证明。

集合的交的问题可以转化成集合的并来解决,就是全集减去补集的并。

Min-Max 容斥

对于一个元素之间满足全序关系且有加减性的元素列 {xi},设其大小为 n,则我们有以下关系:

maxiSxi=TS(1)|T|1minjTxj

miniSxi=TS(1)|T|1maxjTxj

证明就是讨论元素贡献。取 mS,假设 xm 是第 k 大的元素,则可以讨论 xk 会作为哪些集合的元素出现。

  1. k=1
    我们需要的就是 xm,容易发现它只会在 {xm} 这一个集合中作为最小值出现。
    所以它的贡献就是 (1)0xm=xm
  2. k>1
    最小的元素是第 k 大的元素,那其余元素只能是第 l<k 大的元素了,这样的元素一共有 k1 个。
    可以写出选择 i+1 个的贡献系数,也就是

    i=0k1(k1i)(1)i1=(11)k1=0

因此最后的贡献是第一小的数,即 maxiSxi。最小值可以如上地证明。
因此得证。

Min-Max 容斥之所以有用,其中一个原因是它在期望上也成立:众所周知在期望意义下的 max,min 是不像普通的 max,min 那么好求的,需要做转化。写出式子:

E(maxiSxi)=TS(1)|T|1E(minjTxj)

E(miniSxi)=TS(1)|T|1E(maxjTxj)

证明:

可以通过枚举可能的 y 序列写出一种期望的表示方法:

E(maxiSxi)=yP(y=x)maxjSyj

可以发现后面的部分就可以直接施上面的 Min-Max 容斥公式了。也就是

E(maxiSxi)=yP(y=x)maxjSyj=yP(y=x)TS(1)|T|1minjTyj=TS(1)|T|1yP(y=x)minjTyj=TS(1)|T|1E(miniSxi)

因此得证。

考虑到上面的容斥,我们不难想到,是否通过一些其他的容斥系数来转化到组合数求和上,从而指向性地得到第 k 大和第 k 小。这是可行的,而且我们也可以通过对应公式转化到期望上。这个东西又叫做拓展 Min-Max 容斥。

写出:

k-thmaxiSxi=TS(1)|T|k(|T|1k1)minjTxj

k-thminiSxi=TS(1)|T|k(|T|1k1)maxjTxj

E(k-thmaxiSxi)=TS(1)|T|k(|T|1k1)E(minjTxj)

E(k-thminiSxi)=TS(1)|T|k(|T|1k1)E(maxjTxj)

不妨设 xixi+1。我们化式子:

TS(1)|T|k(|T|1k1)minjTxj=iSxiTS(1)|T|k(|T|1k1)[xi=minjTxj]=iSxij=kn(1)jk(j1k1)(nij1)=iSxij=kn(1)jk(nik1)(ni(k1)j1(k1))=iSxij=kn(1)jk(nik1)(nik+1jk)=iSxi(nik1)j=kn(1)jk(nik+1jk)=iSxi(nik1)j0(1)j(nik+1j)=iSxi(nik1)(11)nk+1i

可以发现 Cnik10nk+1i=1 当且仅当 i=nk+1,其余情况都是 0。这就是第 k 大值。
其余三个可以类似上面地证明,不再赘述。

因此得证。

可以发现这个东西能够应用到一个数字质因子的指数上,这自然引出了质因子取 min,max 的操作:gcd,lcm
我们类比地转化操作,有:

lcmiSxi=TS(gcdjTxj)(1)|T|1

这个式子可以叫 gcd-lcm 容斥/反演。

例题:
[HAOI2015] 按位或 - 期望上的 Min-Max 容斥;
bzoj4833 最小公倍佩尔数 - gcd-lcm 容斥;
重返现世 - 拓展 Min-Max 容斥;
[PKUWC2018] 随机游走 - 对顺序进行期望上的 Min-Max 容斥;
Become Big For Me - gcd-lcm 容斥(以及出题人的推荐.


一些反演

规定

记一个元素列 f 的第 i 个元素为 f[i]。记一个矩阵 Ai 行第 j 列的元素为 A[i,j]
一个元素列 f 对应的向量为 f

反演是什么?

我们考虑两个元素列 f,g 之间的双向关系,这一对关系就叫做反演关系。例如前缀和与差分、倍数求和与倍数差分等。一般地,这类关系是线性的,可以采用一个矩阵 A 和它的逆来描述,这矩阵又叫做关系矩阵。

一般地,我们可以得到一个关系对应的矩阵 A,则 fg 的关系可以经由

f[k]=i0A[k,i]×g[i]

来描述,也就是 f=Ag

我们已经可以通过 g 计算 f 了,而现在需要用 f 计算 g。这样一个过程就叫做反演。不难想到求 A 的逆矩阵 A1,则 g=A1f

例如前缀和矩阵是 A[i,j]=[ij],而我们通过求逆能看到 A1[i,j]=[i=j][i=j+1]。由定义不难发现两个互为反演关系的关系矩阵互逆。

我们也可以通过这类定义来从原有的反演上得到新的反演。具体地,有以下几条方法:

  • 应用转置,容易发现一对互逆矩阵的转置也互逆。
  • 可以对两个矩阵分别乘以 c0,容易发现这两个矩阵仍然互逆。(这里是一个乘 c 一个除 c 的意思吗?)
  • 移动 (1)k 的指数。我们有

    i0(1)niA[n,i]×B[i,m]=[n=m]i0(1)iA[n,i]×(1)mB[i,m]=[n=m]

    可以用在一些出现了 (1)nk 的时候,比方说二项式反演。

由一维情况可以拓展到二维情况。假设我们有两个关系矩阵 A,B,他们分别描述了 i,j 两维的反演信息。我们有这两个关系上矩阵 F,G 的二维反演:

F[n,m]=i0j0A[n,i]×B[m,j]×G[i,j]  G[n,m]=i0j0A1[n,i]×B1[m,j]×F[i,j]

发现这就是各维反演系数的乘积。

证明可以构造四维矩阵。
不妨构造 C[(i,k),(j,l)]=A[i,j]×B[k,l]D[(i,k),(j,l)]=A1[i,j]×B1[k,l]。我们需要证明的就是 C×D=I,也就是 (C×D)[(i,j),(k,l)]=[(i,j)=(k,l)]

(C×D)[(i,j),(k,l)]=(t1,t2)C[(i,j),(t1,t2)]×D[(t1,t2),(k,l)]=(t1,t2)A[i,t1]×B[j,t2]×A1[t1,k]×B1[t2,l]=t1A[i,t1]×A1[t1,k]t2B[j,t2]×B1[t2,l]=[i=k]×[j=l]=[(i,j)=(k,l)]

因此得证。

由二维情况可以拓展到多维情况,证明类似,不再赘述。

二项式反演

最基础也最常见的反演。

首先写出第一种形式:

f(n)=i=0n(1)i(ni)g(i)g(n)=i=0n(1)i(ni)f(i)

这依赖着 A[n,m]=(1)mCmn 这个矩阵是自逆的。

证明可以写一下 A×A 的形式。也就是

(A×A)[n,m]=i0A[n,i]×A[i,m]=i0(1)i(ni)×(1)m(im)=(1)mi0(1)i(ni)(im)=(1)mi0(1)i(nm)(nmim)=(1)m(nm)i0(1)i(nmim)=(1)m(nm)i0(1)i+m(nmi)=(nm)i0(1)i(nmi)=(nm)0nm=[n=m]

我这个证法挺简洁?

然后用上面提过的移动 (1)nk 可以得到

f(n)=i=0n(ni)g(i)g(n)=i=0n(1)ni(ni)f(i)

这个东西也可以 egf 来证。也就是

f(n)n!=i=0n1(ni)!g(i)i!

DNA 动了嘛?构造 f,g 的 egf F,G,则 F=ex×G,也就能导出 G=ex×F,化一下就能到右边了。

然后用上面提过的转置可以得到

f(n)=in(in)g(i)g(n)=in(1)in(in)f(i)

然后用上面提过的移动 (1)nk 可以得到

f(n)=in(1)i(in)g(i)g(n)=in(1)i(in)f(i)

这也就是经典的四种式子了。

例题(难度大概逐渐递增?看出题时间和来源也是):
[NOI Online #2 提高组] 游戏;
已经没有什么好害怕的了
[HAOI2018] 染色;
[TJOI2019] 唱、跳、rap和篮球;
[MtOI2018] 情侣?给我烧了!;
[CTS2019] 随机立方体.

莫比乌斯反演

这个东西是数论相关知识。

我们现在想要研究一个函数在某一点值的所有因数处的取值,也就是转移矩阵 A[n,d]=[d|n]。对这个转移矩阵求逆可以得到 A1[n,d]=[d|n]×μ(nd)。这个东西的证明是数论知识,具体着眼于这样一个结构上。

我们定义 μ 函数为满足 d|nμ(d)=[n=1] 的函数。我们可以通过这个定义写出 μ(n) 的取值:

μ(n)={1 ,n=10 ,n (1)k ,k  n 

这个定义的导出参见 Min-Max 容斥的容斥系数设计。

于是我们可以写出反演关系:

f(n)=d|ng(d)g(n)=d|nf(d)μ(nd)

然后用上面提过的转置可以得到

f(n)=n|dg(d)g(n)=n|df(d)μ(dn)

后面的知识可以看莫比乌斯反演应用杜教筛贝尔级数

斯特林反演

这一点用到了两类斯特林数之间的关系。

首先介绍一下两类斯特林数以及他们的一些性质。前置性质前置(后置?)性质

第一类斯特林数 [nm]n 个元素分为 m 个环的方案数(旋转后相同的算一个环)。

递推公式:[nm]=[n1m1]+(n1)[n1m]
可以考虑如何插入一个新的元素,也就是[自己成新的环/插入原有的环],每个环的插入点和环大小相同,因此总共有 n1 个彼此不同的插入点,乘 (n1)

行的 ogf:xn¯=k0[nk]xk
归纳法即得。从其中我们还能知道当 x=1 时有 n!=k0[nk]

列的 egf:(ln(1x))kk!=n0[nk]xnn!
k 个环排列做一下直接组合即得。

二元 gf(上标 egf,下标 ogf):

(1x)y=i0j0[ij]xiyji!

推导仍然可以考虑对环排列组合,再用一个额外的占位元记录组合进来的个数。
容易写出环排列的 egf 是 ln(1x),那不妨记录单个环排列是 yln(1x)。对它做 exp 即得 (1x)y

第二类斯特林数 {nm}n 个不同元素放入 m 个相同的盒子,无空盒的方案数。

递推公式:{nm}={n1m1}+m{n1m}
可以考虑如何插入一个新的元素,也就是[自己成新的环/插入原有的环],每个盒的插入等价,因此总共有 m 个彼此不同的插入点,乘 m

列的 egf:(ex1)kk!=nk{nk}xnn!
和上面类似的做法。

二元 gf(上标 egf,下标 ogf):

exp(y(ex1))=i0j0{ij}xiyji!

这个形式就更显然了是吧。

有一个生成单位元的公式,在一些情况下有用:

k=mn{nk}[km](1)km=[n=m]

都说到这了就再说说斯特林数参与的普通幂和阶乘幂的转换吧。
直接给出公式:

xn=k=1n{nk}xk_=k=1n(1)nk{nk}xk¯

xn_=k=1n(1)nk[nk]xkxn¯=k=1n[nk]xk

然后就是斯特林反演的经典形式了。

f(n)=i=0n{ni}g(i)g(n)=i=1n(1)ni[ni]f(i)

这里当然能用单位元替代的性质来做,但是直接用 egf 代换也行。由第一个式子是可以推出 f,g 的 egf 的关系的,设二者是 F,G,则我们能得到 F(x)=G(ex1),然后就是 G(x)=F(ln(1+x)),展开即可得到右边。
繁而不难,留作读者练习。

然后就是几个由移动 1 和转置矩阵得到的公式:

f(n)=i=0n(1)ni{ni}g(i)g(n)=i=1n[ni]f(i)

f(n)=i=0n(1)i{ni}g(i)g(n)=i=1n(1)i[ni]f(i)

f(n)=in{in}g(i)g(n)=in(1)in[in]f(i)

f(n)=in(1)in{in}g(i)g(n)=in[in]f(i)

例题:
明明的随机数(校内题(弱化版;
CF932E(不是很反演;
CF960G(不是很反演;
bzoj4671 异或图;
[HEOI2016/TJOI2016] 求和;
[国家集训队] Crash 的文明世界.

单位根反演

单位根是啥?
注意:我们这里的讨论是在 C 上的,其也可以通过一些方式映射到 Fp 上,其中 p 是质数。
i=1,虚数单位。

n 次单位根,是 xn=1 在复数域上的 n 个解,第 k[0,n) 个解可以写作

e2πki/n=cos(2knπ)+isin(2knπ)

我们记第 in 次单位根为 ωniωn0=1;任意单位根都是 ωn1 的倍数,它常省略右上角角标 1

扔到 Fp 上的话就是 xn1(modp)n 个解,但有可能不成立,具体判断方法看下面的构造。
我们设 p 的一个原根是 g,则我们有 ωn=g(p1)/n。可以发现这样构造出来的 ωn 是满足要求的。

单位根反演的公式如下:

[n|a]=1nk=0n1ωnak

证明考虑分讨。
a0(modn) 时我们可以等比数列求和,得到右侧就是 1nωnan1ωna1=1n11ωna1=0
a0(modn) 时发现等比数列公比为 1,能得到右侧就是 1nk=0n1ωn0=1

可以导出下式:

[ab (mod n)]=1ni=0n1ωn(ab)k

例题:
LJJ 学二项式定理;
小猪佩奇学数学;
[集训队作业2018] 复读机;
[HNOI2019] 白兔之舞.



参考资料:

炫酷反演魔术, command_block ;
Min-Max 容斥小记, command_block ;
多项式计数杂谈, command_block ;
浅谈斯特林数及斯特林反演, y2823774827y ;
单位根反演小记, command_block ;
容斥与反演, juju527 ;
容斥原理 - Min-Max 容斥, oi-wiki, Peanut-Tang et al. .

posted @   joke3579  阅读(460)  评论(19编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示