二项式反演学习笔记

二项式反演

引入

A c A^c Ac表示 A A A的补集。

已知简单的容斥原理为:
∣ ⋃ i = 1 n A i ∣ = ∑ p 1 < p 2 < ⋯ < p m ∣ ⋂ j = 1 m A p j ∣ ( − 1 ) m + 1 |\bigcup_{i=1}^{n} A_i|=\sum_{p_1<p_2<\dots<p_m}|\bigcap_{j=1}^{m}A_{p_j}|(-1)^{m+1} i=1nAi=p1<p2<<pmj=1mApj(1)m+1
根据集合交并补的意义可知:
∣ ⋂ i = 1 n A i c ∣ = ∣ S ∣ − ∣ ⋃ i = 1 n A i ∣ ∣ ⋂ i = 1 n A i ∣ = ∣ S ∣ − ∣ ⋃ i = 1 n A i c ∣ |\bigcap_{i=1}^{n}A_i^c|=|S|-|\bigcup_{i=1}^{n}A_{i}|\\ |\bigcap_{i=1}^{n}A_i|=|S|-|\bigcup_{i=1}^{n}A_{i}^c| i=1nAic=Si=1nAii=1nAi=Si=1nAic
当然第二条式子可以把 A i = B i c A_{i}=B_{i}^c Ai=Bic带入第一条,同样能够得到。

学习链接:二项式反演及其应用

各类形式

前置条件

集合的交的大小只和集合的个数有关

f ( n ) , g ( n ) f(n),g(n) f(n),g(n)分别表示 n n n个补集的交的大小, g ( n ) g(n) g(n)表示 n n n个原集的交的大小

形式零

由引入中的式子可得:
f ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) g ( i ) g ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) f ( i ) f(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\\ g(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i)\\ f(n)=i=0n(1)i(in)g(i)g(n)=i=0n(1)i(in)f(i)
显然这里 f ( 0 ) = g ( 0 ) = ∣ S ∣ f(0)=g(0)=|S| f(0)=g(0)=S

考虑从代数的角度证明,由于式子是对称的,故只需证等式一即可:
f ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) g ( i ) = ∑ i = 0 n ( − 1 ) i ( n i ) ∑ j = 0 n ( − 1 ) j ( i j ) f ( j ) = ∑ j = 0 n ( − 1 ) j f ( j ) ∑ i = j n ( n i ) ( i j ) ( − 1 ) i = ∑ j = 0 n ( − 1 ) j f ( j ) ∑ i = j n ( n j ) ( n − j i − j ) ( − 1 ) i = ∑ j = 0 n ( − 1 ) j ( n j ) f ( j ) ∑ k = 0 n − j ( n − j k ) ( − 1 ) j + k = ∑ j = 0 n ( n j ) f ( j ) ( 1 − 1 ) n − j = f ( n ) \begin{aligned} f(n) & =\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\\ & =\sum_{i=0}^{n}(-1)^i\binom{n}{i}\sum_{j=0}^{n}(-1)^j\binom{i}{j}f(j)\\ & =\sum_{j=0}^{n}(-1)^jf(j)\sum_{i=j}^{n}\binom{n}{i}\binom{i}{j}(-1)^i\\ & =\sum_{j=0}^{n}(-1)^jf(j)\sum_{i=j}^{n}\binom{n}{j}\binom{n-j}{i-j}(-1)^i\\ & =\sum_{j=0}^{n}(-1)^j\binom{n}{j}f(j)\sum_{k=0}^{n-j}\binom{n-j}{k}(-1)^{j+k}\\ & =\sum_{j=0}^{n}\binom{n}{j}f(j)(1-1)^{n-j}\\ & =f(n) \end{aligned} f(n)=i=0n(1)i(in)g(i)=i=0n(1)i(in)j=0n(1)j(ji)f(j)=j=0n(1)jf(j)i=jn(in)(ji)(1)i=j=0n(1)jf(j)i=jn(jn)(ijnj)(1)i=j=0n(1)j(jn)f(j)k=0nj(knj)(1)j+k=j=0n(jn)f(j)(11)nj=f(n)
综上,成立,故有如下的等价关系:
f ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) g ( i ) ⇔ g ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) f ( i ) f(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i) f(n)=i=0n(1)i(in)g(i)g(n)=i=0n(1)i(in)f(i)

小总结

这里证明过程中比较重要的一点就是把 f ( j ) f(j) f(j)提到求和的第一层,因为想要证明的结论是上面的和式可以化简为 f ( n ) f(n) f(n),由于 f ( k ) f(k) f(k)的取值比较复杂,故可以排除是多个 f ( k ) f(k) f(k)通过系数消除贡献,故证明方向为证明 f ( n ) f(n) f(n)在这个和式中的系数为 1 1 1,其他为 0 0 0

当然中间还用到了数学中比较常用的还原法,如令 k = i − j k=i-j k=ij

这里还有一个比较常见的化简 ( n m ) ( m k ) = ( n k ) ( n − k m − k ) \binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k} (mn)(km)=(kn)(mknk),这个就是从组合意义入手找出等式,然后从代数上简单证明,用到这一步是因为和式中涉及 ( i j ) \binom{i}{j} (ji)这个量,两个枚举的量揉在一起不好算,所以要想办法拆开,不能让上下指标都是变化的。

形式一

有如下关系:
f ( n ) = ∑ i = 0 n ( n i ) g ( i ) ⇔ g ( n ) = ∑ i = 0 n ( − 1 ) n − i ( n i ) f ( i ) f(n)=\sum_{i=0}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f(i) f(n)=i=0n(in)g(i)g(n)=i=0n(1)ni(in)f(i)
不妨用换元法来证明:

h ( n ) = ( − 1 ) n g ( n ) h(n)=(-1)^ng(n) h(n)=(1)ng(n),那么在这里有 f ( n ) = ∑ i = 0 n ( n i ) ( − 1 ) i h ( i ) f(n)=\sum_{i=0}^{n}\binom{n}{i}(-1)^ih(i) f(n)=i=0n(in)(1)ih(i),根据形式零可知 h ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) f ( i ) h(n)=\sum_{i=0}^{n}(-1)^i\binom{n}{i}f(i) h(n)=i=0n(1)i(in)f(i),带入解得 g ( n ) = ∑ i = 0 n ( − 1 ) n − i ( n i ) f ( i ) g(n)=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f(i) g(n)=i=0n(1)ni(in)f(i)

当然在学习链接中还给出了一个更一般的形式,即下界不是 0 0 0而是任意的 m m m

证明还是考虑从代数入手,证明技巧和上面类似。(确实已计算过)

故形式一的普适形式为:
f ( n ) = ∑ i = m n ( n i ) g ( i ) ⇔ g ( n ) = ∑ i = m n ( − 1 ) n − i ( n i ) f ( i ) f(n)=\sum_{i=m}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i=m}^{n}(-1)^{n-i}\binom{n}{i}f(i) f(n)=i=mn(in)g(i)g(n)=i=mn(1)ni(in)f(i)

形式二

与一类似,但是上下指标换了过来:
f ( n ) = ∑ i = n m ( i n ) g ( i ) ⇔ g ( n ) = ∑ i = n m ( − 1 ) i − n ( i n ) f ( i ) f(n)=\sum_{i=n}^{m}\binom{i}{n}g(i)\Leftrightarrow g(n)=\sum_{i=n}^{m}(-1)^{i-n}\binom{i}{n}f(i) f(n)=i=nm(ni)g(i)g(n)=i=nm(1)in(ni)f(i)
证明直接用代数即可,技巧不能说十分相似,只能说完全一致。

当然,这个式子应用较广,因为这个式子有组合意义:

f ( n ) f(n) f(n)表示钦定了 n n n个一定出现的方案数(其他未钦定的可以出现也可以不出现), g ( n ) g(n) g(n)表示恰好出现 n n n个的方案数。

那么根据组合意义可知:
f ( n ) = ∑ i = n m ( i n ) g ( i ) f(n)=\sum_{i=n}^{m}\binom{i}{n}g(i) f(n)=i=nm(ni)g(i)
即枚举实际上有多少个出现,然后钦定 n n n个是出现的。

例题

集合计数

题目链接:集合计数

显然钦定 x x x个出现的方案数为 f ( x ) = ( n x ) ( 2 2 n − x − 1 ) f(x)=\binom{n}{x}(2^{2^{n-x}}-1) f(x)=(xn)(22nx1),设 g ( n ) g(n) g(n)表示恰好为 n n n个方案数,那么根据组合意义显然有 f ( x ) = ∑ i = x n ( i x ) g ( i ) f(x)=\sum_{i=x}^{n}\binom{i}{x}g(i) f(x)=i=xn(xi)g(i)

经典的形式二,直接反演就可以得:
g ( k ) = ∑ i = k n ( − 1 ) i − k ( n i ) ( i k ) ( 2 2 n − i − 1 ) g(k)=\sum_{i=k}^{n}(-1)^{i-k}\binom{n}{i}\binom{i}{k}(2^{2^{n-i}}-1) g(k)=i=kn(1)ik(in)(ki)(22ni1)
实现上预处理 p i = 2 2 i p_i=2^{2^i} pi=22i即可 O ( n ) O(n) O(n)

已经没有什么好害怕的了

题目链接:已经没有什么好害怕的了

由于输入的数互不相同,故可以确定最终有 m = n + k 2 m=\frac{n+k}{2} m=2n+k组是 A > B A>B A>B的,所以首先 m m m要是整数。

f ( n ) f(n) f(n)表示钦定有 n n n个是 A > B A>B A>B的,设 g ( n ) g(n) g(n)表示恰好有 n n n个是 A > B A>B A>B的,那么显然可以套形式二反演。

A , B A,B A,B从大到小排,设 d p i , j dp_{i,j} dpi,j表示 A A A中前 i i i个数有 j j j个是 A > B A>B A>B的。

假如 i i i不钦定 A > B A>B A>B那么 d p i , j = d p i − 1 , j dp_{i,j}=dp_{i-1,j} dpi,j=dpi1,j;假如钦定 i i i A > B A>B A>B的,那么设 c n t cnt cnt表示有 c n t cnt cnt B B B是小于 A i A_i Ai的,那么前面会占用 j − 1 j-1 j1个,故目前的 A i A_i Ai c n t − ( j − 1 ) cnt-(j-1) cnt(j1) B B B可以用来匹配,所以 d p i , j = d p i − 1 , j − 1 ( c n t − j + 1 ) dp_{i,j}=dp_{i-1,j-1}(cnt-j+1) dpi,j=dpi1,j1(cntj+1)

然后 f ( n ) f(n) f(n)是钦定,故其他可以随意匹配,那么 f ( x ) = d p n , x ( n − x ) ! f(x)=dp_{n,x}(n-x)! f(x)=dpn,x(nx)!,然后直接反演求 g ( m ) g(m) g(m)即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值