模板:广义二项式反演/广义容斥(组合数学)

60 篇文章 0 订阅
54 篇文章 0 订阅

所谓二项式反演,就是对两个项的式子进行反演。

(逃)

前言

期望和容斥是我的感性二兄弟!
之前的容斥我基本也都是靠感性理解做的…
感性理解就会导致:考场上试着写出一个式子,不知道它对不对。
然后就会有写出正确式子但是不敢敲代码,或者敲了半天过不去样例才明白自己的式子是错的(甚至还怀疑是不是代码写挂了)这样的悲剧发生(我都经历过
前天差不多搞完了期望,今天轮到容斥了!
让我们暂时放下感性,拥抱数学。

PS:本篇有大量的数学语言,其中的一些变换来自与对式子实质的理解,直接硬看可能难以明白。建议看清楚大致思路后就按照自己的路子推一遍。(因为我就是这么做的

经典容斥原理

我本来想叫它狭义容斥,但似乎有点瞧不起它…
就像经典力学不叫狭义力学一样。
抽象的内容如下:
假设有 k k k 个性质,满足每个性质的集合分别为 A 1... k A_{1...k} A1...k S = { A i ∣ 1 ≤ i ≤ k } S=\{A_i|1\le i\le k\} S={Ai1ik},那么就有:
∣ ⋂ i = 1 k A i ∣ = ∑ T ⊆ S ( − 1 ) ∣ T ∣ × ∣ ⋂ i = 1 ∣ T ∣ T i ˉ ∣ |\bigcap_{i=1}^k A_i|=\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}| i=1kAi=TS(1)T×i=1TTiˉ
证明:
G P = { x ∣ ∀ A i ∈ P , x ∈ A i , ∀ A i ∉ P , x ∉ A i } G_P=\{x|\forall A_i\in P,x\in A_i,\forall A_i\notin P,x\notin A_i\} GP={xAiP,xAi,Ai/P,x/Ai},也就是恰好满足性质集合 P P P 的元素集合
考虑每个 G G G 集合的统计次数,就有:
∑ T ⊆ S ( − 1 ) ∣ T ∣ × ∣ ⋂ i = 1 ∣ T ∣ T i ˉ ∣ = ∑ P ⊆ S ∣ G P ∣ ∑ T ∩ P = ∅ ( − 1 ) ∣ T ∣ = ∑ P ⊆ S ∣ G P ∣ ∑ T ⊆ P ˉ ( − 1 ) ∣ T ∣ = ∑ P ⊆ S G P [ P ˉ = ∅ ] = ∣ ⋂ i = 1 k A i ∣ \sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|=\sum_{P\subseteq S}|G_P|\sum_{T\cap P=\emptyset}(-1)^{|T|}\\=\sum_{P\subseteq S}|G_P|\sum_{T\subseteq \bar{P}}(-1)^{|T|}=\sum_{P\subseteq S}G_P[\bar{P}=\emptyset]\\=|\bigcap_{i=1}^k A_i| TS(1)T×i=1TTiˉ=PSGPTP=(1)T=PSGPTPˉ(1)T=PSGP[Pˉ=]=i=1kAi
证毕。

广义二项式反演/广义容斥

通常是用来进行至多和恰好之间的转化

本人非常不喜欢广义容斥这个名字。
因为感觉它有误导性,我很长时间都是按照容斥的角度硬理解,但是就用容斥三个圈套来套去的那点东西,把组合数说成几个里面选几个,硬考虑统计次数,似乎很难讲明白,也许其实也可以那么理解,只是我不会qwq。
我感觉还是从它的另一个叫法:广义二项式反演 的角度来理解更加简单。
定义 f x f_x fx至少 x x x 个元素的方案数, g x g_x gx恰好 x x x 个元素的方案数。
则有:
f x = ∑ i = x n C i x g i f_x=\sum_{i=x}^nC_i^x g_i fx=i=xnCixgi
然而,通常情况下, g g g 的值较难求出,而 f f f 的值相对简单,这是就需要进行反演用 f f f g g g
g x = ∑ i = x n ( − 1 ) i − x C i x f i g_x=\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_i gx=i=xn(1)ixCixfi
证明:
∑ i = x n ( − 1 ) i − x C i x f i \sum_{i=x}^n(-1)^{i-x}C_{i}^xf_i i=xn(1)ixCixfi
= ∑ i = x n ( − 1 ) i − x C i x ∑ j = i n C j i g j =\sum_{i=x}^n(-1)^{i-x}C_{i}^x\sum_{j=i}^nC_j^ig_j =i=xn(1)ixCixj=inCjigj
= ∑ j = x n g j ∑ i = x j ( − 1 ) i − x C i x C j i =\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_i^xC_j^i =j=xngji=xj(1)ixCixCji
= ∑ j = x n g j ∑ i = x j ( − 1 ) i − x C j x C j − x i − x =\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_j^xC_{j-x}^{i-x} =j=xngji=xj(1)ixCjxCjxix
= ∑ j = x n C j x g j ∑ i = 0 j − x ( − 1 ) i C j − x i ⋅ 1 ( j − x ) − i =\sum_{j=x}^nC_j^xg_j\sum_{i=0}^{j-x}(-1)^{i}C_{j-x}^{i}\cdot1^{(j-x)-i} =j=xnCjxgji=0jx(1)iCjxi1(jx)i
= ∑ j = x n C j x g j [ j = x ] =\sum_{j=x}^nC_j^xg_j[j=x] =j=xnCjxgj[j=x]
= g x =g_x =gx
证毕。

类似的,若 f x f_x fx至多 x x x 个元素的方案数, g x g_x gx恰好 x x x 个元素的方案数。
则有:
f x = ∑ i = 0 n C x i g i f_x=\sum_{i=0}^nC_x^i g_i fx=i=0nCxigi

g x = ∑ i = 0 x ( − 1 ) x − i C x i f i g_x=\sum_{i=0}^x(-1)^{x-i}C_{x}^if_i gx=i=0x(1)xiCxifi
证法类似。

min-max 容斥

感觉换汤不换药。
给出式子:
max ⁡ ( S ) = ∑ T ⊂ S ( − 1 ) ∣ T ∣ min ⁡ ( T ) \max(S)=\sum_{T\sub S}(-1)^{|T|}\min(T) max(S)=TS(1)Tmin(T)
min ⁡ ( S ) = ∑ T ⊂ S ( − 1 ) ∣ T ∣ max ⁡ ( T ) \min(S)=\sum_{T\sub S}(-1)^{|T|}\max(T) min(S)=TS(1)Tmax(T)
这里只给出第一个式子的证明,第二个式子的证明较为类似。
考虑最大值 max ⁡ ( S ) \max(S) max(S),它成为最小值产生贡献当且近当 T = { max ⁡ ( S ) } T=\{\max(S)\} T={max(S)},显然只会产生一次正贡献。
而对于不是最大值的元素 x ∈ S x\in S xS,设比它大的元素的个数为 k k k,那么它成为最小值产生贡献当且近当 T T T 为前 k k k 个元素的某个子集并上 { x } \{x\} {x},那么它的系数就是:
∑ i = 0 x ( x i ) ( − 1 ) i \sum_{i=0}^x\binom{x}{i}(-1)^i i=0x(ix)(1)i
二项式反演一下:
∑ i = 0 x ( x i ) ( − 1 ) i = ∑ i = 0 x ( x i ) ( − 1 ) i ( 1 ) x − i = ( 1 − 1 ) x = 0 \sum_{i=0}^x\binom{x}{i}(-1)^i=\sum_{i=0}^x\binom{x}{i}(-1)^i(1)^{x-i}=(1-1)^{x}=0 i=0x(ix)(1)i=i=0x(ix)(1)i(1)xi=(11)x=0
所以所有不是最大值的元素的贡献都是0。
那么最后西格玛的结果就是 max ⁡ ( S ) \max(S) max(S)

注意:这个式子当最小值不唯一的时候依然成立 min ⁡ ( T ) \min(T) min(T) 的含义就变为了所有并列最小值的和。但是所求的最大值必须唯一!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值