Processing math: 100%

嘘~ 正在从服务器偷取页面 . . .

二项式_


二项式反演

引入

根据容斥原理

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

的另一种形式

|¯A1¯A2¯An|=|S|1in|Ai|+1i<jn|AiAj|+(1)n×|A1A2An|

由于集合的补集的补集就是它自己,那么

|A1A2An|=|S|1in|¯Ai|+1i<jn|¯Ai¯Aj|+(1)n×|¯A1¯A2¯An|

考虑一种特殊的情况:多个集合的交集大小只与集合的数目有关。

f(n)n 个补集的交集大小,g(n) 表示 n 个集合(原)的大小,那么可以得到

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

由于这两个公式是等价的,所以我们得到了二项式反演的初步形式

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

二项式反演

形式一

二项式反演的一种形式如下:

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

证明 令 h(n)=(1)ng(n) ,代入 (0) 可知

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

整理后即可得到 (6)

形式二(常见形式)

这个公式与形式一类似,不过更为常用

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

换一种不容易混淆的写法就是

fi=nj=i(ji)gjgi=nj=i(1)ji(ji)fj

证明 将左侧代入右侧

f(n)=mi=n(in)mj=i(1)ji(ji)f(j)=mi=nmj=i(1)ji(in)(ji)f(j)=mj=nf(j)ji=n(1)ji(in)(ji)=mj=n(jn)f(j)ji=n(jnji)(1)ji=mj=n(jn)f(j)jnt=0(jnt)(1)t1jnt=mj=n(jn)f(j)(11)jn=mj=n(jn)f(j)[j=n]=(nn)f(n)=f(n)

则有左右恒等。


组合意义

fi 为“钦定选 i 个”(然而常常会重复计算一些情况),并记 gi 为 “恰好选 i 个”

则对于任意 jigjfi 中被计算了 (ji) 次,故

fi=nj=i(ji)gjgi=nj=i(1)ji(ji)fj

其中 n 为数目的上界。


例题

参考 洛谷P4859 已经没有什么好害怕的了 题解

还有 洛谷P10596 & BZOJ2839 集合计数 题解 ,不过这题的二项式反演解法是后来补的(


参考文献

[1] https://www.cnblogs.com/GXZlegend/p/11407185.html


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3