[OI] 容斥原理拓展

10.容斥原理拓展

10.1 二项式反演

P.10.1(1)

U={S1,S2,S3...Sn},且任意 i 个元素的交集都相等

定义 g(x)x 个集合的交集,f(x)x 个集合补集的交集(定义 f(0)=g(0)=U),则:

inSi∣=∣U+i{(1)i×f(i)}

可知对 g(i),符合要求的 f(i) 组合共有 Cni 种,即原式可以化为:

inSi∣=in(1)iCnif(i)

同理有

inUSi∣=in(1)iCnig(i)

因为

f(n)∣=∣inUSi,g(n)∣=∣inSi

因此得出结论:

g(n)=i=0n(1)iCnif(i)f(n)=i=0n(1)iCnig(i)

P.10.1(2)

因为

Cni×Cij=n!(ni)!i!×i!(ij)!j!=n!(nj)!j!×(nj)![(nj)(ni)]!(ij)!=Cnj×Cnjn1

因此

i=jn{(1)i×Cni×(1)j×Cij}=Cnj(1)ji=0njCnji=Cnj×(11)nj=Cnj×0nj

jn 时,原式值为 0,否则值为 1.

g(n)=i=0n(1)iCnif(i)f(n)=i=0n(1)iCnig(i) 成立时,可以推知

f(n)=i=0n(1)iCni=i=0n(1)iCnii=jn(1)jCijf(j)=j=0nf(j)i=jn{(1)i×Cni×(1)j×Cij}

该式末项 i=jn{(1)i×Cni×(1)j×Cij} 已有上述结论,故当 jnj=n 时分别带入讨论,发现原式均成立,证毕.

事实上,二项式反演还有一个更常用的推导式:

g(n)=i=0nCnif(i)f(n)=i=0n(1)niCnig(i)

根据二项式反演的性质,我们通常会构造一组 {f(i),g(i)},使得两者之间存在包含关系并且有一者很方便求出,通过反演来快速得到另一者的值.

二项式反演还有其他形式:

g(n)=i=nN(1)iCnif(i)f(n)=i=nN(1)iCnig(i)

g(n)=i=nNCnif(i)f(n)=i=nN(1)inCnig(i)

10.2 Min-Max 容斥

对于满足全序关系并且其中元素满足可加减性的序列 {xi},设其长度为 n,并设 S={1,2,3,,n} ,则有:

maxiSxi=TS(1)|T|1minjTxj

miniSxi=TS(1)|T|1maxjTxj

一个常用的实际应用为 Min-Max 容斥的低维版本:min(a,b)=a+bmax(a,b)

证明略.

10.3 错位排列

满足 iai 的排列被称为错位排列.

10.3.1 公式

套用补集的公式,问题变成求

|i=1nSi|

可以知道,Si 的含义是满足 Pi=i 的排列的数量。用容斥原理把问题式子展开,需要对若干个特定的集合的交集求大小,即:

|i=1kSai|

其中省略了 ai<ai+1 的条件以方便表示

上述 k 个集合的交集表示有 k 个变量满足 Pai=ai 的排列数,而剩下 nk 个数的位置任意,因此排列数:

|i=1kSai|=(nk)!

那么选择 $k4 个元素的方案数为

Cnk,因此有:

|i=1nSi|=k=1n(1)k1a1,,k|i=1kSai|=k=1n(1)k1Cnk(nk)!=k=1n(1)k1n!k!=n!k=1n(1)k1k!

因此 n 的错位排列数为:

Dn=n!n!k=1n(1)k1k!=n!k=0n(1)kk!

10.3.2 递推式

Dn=(n1)(Dn1+Dn2)

Dn=nDn1+(1)n)

待证明

10.4 Catalan 数

1 1 2 5 14 42 132

Hn=(2nn)n+1

关于 Catalan 数的常见公式:

Hn={i=1nHi1Hnin2,nN+1n=0,1

Hn=Hn1(4n2)n+1

Hn=C2nnC2nn1

posted @   HaneDaniko  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 历时 8 年,我冲上开源榜前 8 了!
· 物流快递公司核心技术能力-海量大数据处理技术
· 四大AI编程工具组合测评
· 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案
· 几个技巧,教你去除文章的 AI 味!
点击右上角即可分享
微信分享提示