二项式反演
设 f(n) 表示 n 个补集的交集大小,g(n) 表示 n 个原集的交集的大小。
fn=n∑i=0(−1)i(ni)gi⇔gn=n∑i=0(−1)i(ni)fi
fn=n∑i=0(ni)gi⇔gn=n∑i=0(−1)n−i(ni)fi
fk=n∑i=k(ik)gi⇔gk=n∑i=k(−1)i−k(ik)fi
这里证明就只证明一下二式吧
f(n)=n∑i=0(ni)g(i)⇔g(n)=n∑i=0(−1)n−i(ni)f(i)
这个证明的话,就是直接带入法
将 f 式子带入到 g 的式子中,得到
g(n)=n∑i=0(−1)n−i(ni)i∑j=0g(j)(ij)
我们将 j 的枚举提前,这个是反演的基本操作
g(n)=n∑j=0g(j)n∑i=j(−1)n−i(ni)(ij)
然后就直接把后面这个拆开
(ni)(ij)=n!i!(n−i)!×i!j!(i−j)!
这个时候就直接把 i! 消掉,再上下同时乘上 (n−j)! 就直接变成了下面的等式
(ni)(ij)=(nj)(n−jn−i)
直接在原来的式子中替换它
g(n)=n∑j=0g(j)n∑i=j(−1)n−i(nj)(n−jn−i)
那前面那个组合数已经和 i 没有关系了,直接提出来
g(n)=n∑j=0(nj)g(j)n∑i=j(−1)n−i(n−jn−i)
我们就直接吧后面那个 i 改一下从 i=0 枚举到 n−j然后就直接用二项式定理
g(n)=n∑j=0(nj)g(j)n−j∑i=0(−1)i(n−ji)
g(n)=n∑j=0(nj)g(j)(−1+1)n−j
后面的这个式子只有在 n=j 的时候才成立,所以得证
本文作者:PassName
本文链接:https://www.cnblogs.com/spaceswalker/p/16483390.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步