二项式反演学习笔记

二项式反演学习笔记

概念

二项式反演作为一种反演形式,常用于通过指定若干个求解恰好若干个的问题,即我们常说的容斥问题。

引入

首先讲讲朴素容斥。

作为集合来说,有

|AB|=|A|+|B||AB|

这其实就是容斥原理。更一般地,有

|A1A2An|=1in|Ai|1i<jn|AiAj|++(1)n1×|A1A2An|

证明:设某一元素被 m 个集合包含,则其对左侧的贡献为 1

而对右侧的贡献为

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

所以每个元素对左右两侧的贡献均相等,得证。

形式

形式零

顺着刚刚容斥的公式,记 A 表示 A 的补集,则有

|A1A2An|=|S|iin|Ai|+1i<jn|AiAj|+(1)n×|A1A2An|

同时,因为补集的补集就是原集,因此有

|A1A2An|=|S|iin|Ai|+1i<jn|AiAj|+(1)n×|A1A2An|

下面考虑一种特殊情况:多个集合的交集大小之和集合的数目有关。

也就是说,在总共的 n 个集合里面任选 m 个集合所得到的交集大小不变,均为 sizm

f(m) 表示 m 个补集的交集大小,g(m) 表示 m 个集合的交集大小。通过上面的式子,我们可以得到

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

显然这两个公式等价,且能够相互推导,于是我们得到了二项式反演的形势零

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

形式一

有如下公式

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

证明:考虑函数 h(n)=(1)ng(n),那么代入形式零可以得到

f(n)=i=0n(1)i(ni)h(i)(1)ih(n)(1)n=i=0n(1)i(ni)f(i)f(n)=i=0n(ni)h(i)h(n)=i=0n(1)n+i(ni)f(i)f(n)=i=0n(ni)h(i)h(n)=i=0n(1)ni(ni)f(i)

形式二

和形式一类似,是最常用的公式,公式如下

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

变形应该也可以得到

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

证明:将右式代入左式,有

f(n)=i=nm(in)j=im(1)ji(ji)f(j)=i=nmj=im(1)ji(in)(ji)f(j)=j=nmf(j)i=nj(1)ji(in)(ji)=j=nm(jn)f(j)i=nj(jnji)(1)ji=j=nm(jn)f(j)t=0jn(jnt)(1)t1jnt=j=nm(jn)f(j)(11)jn=jm(jn)f(j)[j=n]=(nn)f(n)=f(n)

左右恒等,得证。

至于下式,令 h(n)=g(n)(1)n,则有

f(n)=i=nm(in)(1)ih(i)(1)ng(n)=i=nm(1)i(in)f(i)f(n)=i=nm(1)i(in)h(i)h(n)=i=nm(1)i(in)f(i)

得证。

意义

更具体的来说,认为 f(n) 表示选择 n 个集合后,至少有 n 个满足条件的方案数。而 g(n) 表示恰好有 n 个满足条件的方案数。如果 in,那么对于 g(i) 来说,会在 f(n) 中被计算 (in) 次,所以有 f(n)=i=nm(in)g(i),接着利用二项式反演即可。也就是所谓至少和恰好的转换。

posted @   DycIsMyName  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示