容斥与反演

容斥与反演

容斥

容斥原理

用于不重不漏地【表达/转化】某集合

广义容斥:合法方案数 = 总方案数 - 不合法方案数

狭义容斥:

|i=1nSi|=x=1n(1)x1i1<i2<<ix|j=1xSij|

我们来证明一下容斥系数为什么是 (1)x1

一个被n个集合包含的元素,那么它的容斥系数之和为:

i=1n(1)i1(ni)=(n0)i=0n(1)i(ni)=1

Min-Max容斥

max(S)=TS(1)|T|1min(T)min(S)=TS(1)|T|1max(T)

其中 max(S) 表示集合 S 中所有元素的最大值。

证明:对于第k+1大的元素,有k个比它小的集合。以它为最小值的,大小为 i 的集合有 (ki1) 个,所以它的统计次数为:

i=1k+1(ki1)(1)i1=i=0k(ki)(1)i=[k=0]

推广到求第 k 大的元素:

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

其中 kthmax(S) 表示集合 S 中所有元素的第 k 大值。证明与上面的类似。

min-max容斥还有很好的期望意义,这是min-max容斥得以广泛使用的重要原因:

E(max(S))=TS(1)|T|1E(min(T))E(min(S))=TS(1)|T|1E(max(T))E(kthmax(S))=TS(1)|T|k(|T|1k1)E(min(T))E(kthmin(S))=TS(1)|T|k(|T|1k1)E(max(T))

反演

反演的本质就是容斥。

我们从一下几种常见的反演来讲:

二项式反演

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

因为第二个式子可以由第一个式子推出,所以我们先证明第一个。

组合意义证明

fn表示恰好使用n个不同元素形成特定结构的方案数,gn表示从n个不同元素中选出若干个元素形成特定结构的总方案数。

于是有:gn=i=0n(ni)fi

使用容斥原理,可以得到:fn=i=0n(1)ni(nm)gi

这个因该很好感性理解,下面是严谨证明

代数证明:(某知名竞赛教练在白板上的珍贵推导过程)



例:例题

我们用矩阵描述这一过程:

((00)00(10)(11)0(n0)(n1)(nn))A(f0f1fn)=(g0g1gn)

((00)00(10)(11)0(1)n(n0)(1)n1(n1)(nn))B(g0g1gn)=(f0f1fn)

刚才给出的证明等价于证明A·B=I。

将A和B转置(延对角线翻着)之后得到的矩阵仍然是互逆的.

所以 gm=i=mn(im)fifm=i=mn(1)im(im)gi

子集反演

f(S)=TSg(T)g(S)=TS(1)|S||T|f(T)f(S)=STg(T)g(S)=ST(1)|T||S|f(T)

第二个式子由第一个式子取补得到。

而对于第一个式子的证明,我们选择讲左式代入右式:

g(S)=TS(1)|S||T|XTg(X)=XSg(X)XTS(1)|S||T|

改为枚举集合T的大小:

上式=XSg(X)i=|X||S|(|S||X|i|X|)(1)|S|i=XSg(X)i=0|S||X|(|S||X|i)(1)|S||X|i=XSg(X)[|X|=|S|]=g(S)

斯特林反转

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

带入用反转公式可以验证。

单位根反演

(应该只在FFT的证明中有用到)

这里用 wi 代表 win

i=0n1wik=n[nk]

证明:

i=0n1wik=i=0n1wki

该式为等比数列,所以:

i=0n1wki={n if wk=11wkn1wk if wk!=1

观察到,wkn=wnk=1,并且 wk=1n|k

所以上式化简为:i=0n1wik=n[nk]

莫比乌斯反演

g(n)=i|nf(i)f(n)=i|nμ(ni)g(i)

不过这玩意一般不是这么用的,详见这里

posted @   花子の水晶植轮daisuki  阅读(8)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js
点击右上角即可分享
微信分享提示