模板:广义二项式反演/广义容斥(组合数学)
文章目錄
- 前言
- 經典容斥原理
- 廣義二項式反演/廣義容斥
- min-max 容斥
所謂二項式反演,就是對兩個項的式子進行反演。
(逃)
前言
期望和容斥是我的感性二兄弟!
之前的容斥我基本也都是靠感性理解做的…
感性理解就會導致:考場上試著寫出一個式子,不知道它對不對。
然后就會有寫出正確式子但是不敢敲代碼,或者敲了半天過不去樣例才明白自己的式子是錯的(甚至還懷疑是不是代碼寫掛了)這樣的悲劇發生(我都經歷過)
前天差不多搞完了期望,今天輪到容斥了!
讓我們暫時放下感性,擁抱數學。
PS:本篇有大量的數學語言,其中的一些變換來自與對式子實質的理解,直接硬看可能難以明白。建議看清楚大致思路后就按照自己的路子推一遍。(因為我就是這么做的)
經典容斥原理
我本來想叫它狹義容斥,但似乎有點瞧不起它…
就像經典力學不叫狹義力學一樣。
抽象的內容如下:
假設有 kkk 個性質,滿足每個性質的集合分別為 A1...kA_{1...k}A1...k?,S={Ai∣1≤i≤k}S=\{A_i|1\le i\le k\}S={Ai?∣1≤i≤k},那么就有:
∣?i=1kAi∣=∑T?S(?1)∣T∣×∣?i=1∣T∣Tiˉ∣|\bigcap_{i=1}^k A_i|=\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|∣i=1?k?Ai?∣=T?S∑?(?1)∣T∣×∣i=1?∣T∣?Ti?ˉ?∣
證明:
設 GP={x∣?Ai∈P,x∈Ai,?Ai?P,x?Ai}G_P=\{x|\forall A_i\in P,x\in A_i,\forall A_i\notin P,x\notin A_i\}GP?={x∣?Ai?∈P,x∈Ai?,?Ai?∈/?P,x∈/?Ai?},也就是恰好滿足性質集合 PPP 的元素集合。
考慮每個 GGG 集合的統計次數,就有:
∑T?S(?1)∣T∣×∣?i=1∣T∣Tiˉ∣=∑P?S∣GP∣∑T∩P=?(?1)∣T∣=∑P?S∣GP∣∑T?Pˉ(?1)∣T∣=∑P?SGP[Pˉ=?]=∣?i=1kAi∣\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|T?S∑?(?1)∣T∣×∣i=1?∣T∣?Ti?ˉ?∣=P?S∑?∣GP?∣T∩P=?∑?(?1)∣T∣=P?S∑?∣GP?∣T?Pˉ∑?(?1)∣T∣=P?S∑?GP?[Pˉ=?]=∣i=1?k?Ai?∣
證畢。
廣義二項式反演/廣義容斥
通常是用來進行至多和恰好之間的轉化。
本人非常不喜歡廣義容斥這個名字。
因為感覺它有誤導性,我很長時間都是按照容斥的角度硬理解,但是就用容斥三個圈套來套去的那點東西,把組合數說成幾個里面選幾個,硬考慮統計次數,似乎很難講明白,也許其實也可以那么理解,只是我不會qwq。
我感覺還是從它的另一個叫法:廣義二項式反演 的角度來理解更加簡單。
定義 fxf_xfx? 為至少選 xxx 個元素的方案數,gxg_xgx? 為恰好選 xxx 個元素的方案數。
則有:
fx=∑i=xnCixgif_x=\sum_{i=x}^nC_i^x g_ifx?=i=x∑n?Cix?gi?
然而,通常情況下,ggg 的值較難求出,而 fff 的值相對簡單,這是就需要進行反演用 fff 求 ggg:
gx=∑i=xn(?1)i?xCixfig_x=\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_igx?=i=x∑n?(?1)i?xCix?fi?
證明:
∑i=xn(?1)i?xCixfi\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_ii=x∑n?(?1)i?xCix?fi?
=∑i=xn(?1)i?xCix∑j=inCjigj=\sum_{i=x}^n(-1)^{i-x}C_{i}^x\sum_{j=i}^nC_j^ig_j=i=x∑n?(?1)i?xCix?j=i∑n?Cji?gj?
=∑j=xngj∑i=xj(?1)i?xCixCji=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_i^xC_j^i=j=x∑n?gj?i=x∑j?(?1)i?xCix?Cji?
=∑j=xngj∑i=xj(?1)i?xCjxCj?xi?x=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_j^xC_{j-x}^{i-x}=j=x∑n?gj?i=x∑j?(?1)i?xCjx?Cj?xi?x?
=∑j=xnCjxgj∑i=0j?x(?1)iCj?xi?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=x∑n?Cjx?gj?i=0∑j?x?(?1)iCj?xi??1(j?x)?i
=∑j=xnCjxgj[j=x]=\sum_{j=x}^nC_j^xg_j[j=x]=j=x∑n?Cjx?gj?[j=x]
=gx=g_x=gx?
證畢。
類似的,若 fxf_xfx? 為至多選 xxx 個元素的方案數,gxg_xgx? 為恰好選 xxx 個元素的方案數。
則有:
fx=∑i=0nCxigif_x=\sum_{i=0}^nC_x^i g_ifx?=i=0∑n?Cxi?gi?
gx=∑i=0x(?1)x?iCxifig_x=\sum_{i=0}^x(-1)^{x-i}C_{x}^if_igx?=i=0∑x?(?1)x?iCxi?fi?
證法類似。
min-max 容斥
感覺換湯不換藥。
給出式子:
max?(S)=∑T?S(?1)∣T∣min?(T)\max(S)=\sum_{T\sub S}(-1)^{|T|}\min(T)max(S)=T?S∑?(?1)∣T∣min(T)
min?(S)=∑T?S(?1)∣T∣max?(T)\min(S)=\sum_{T\sub S}(-1)^{|T|}\max(T)min(S)=T?S∑?(?1)∣T∣max(T)
這里只給出第一個式子的證明,第二個式子的證明較為類似。
考慮最大值 max?(S)\max(S)max(S),它成為最小值產生貢獻當且近當 T={max?(S)}T=\{\max(S)\}T={max(S)},顯然只會產生一次正貢獻。
而對于不是最大值的元素 x∈Sx\in Sx∈S,設比它大的元素的個數為 kkk,那么它成為最小值產生貢獻當且近當 TTT 為前 kkk 個元素的某個子集并上 {x}\{x\}{x},那么它的系數就是:
∑i=0x(xi)(?1)i\sum_{i=0}^x\binom{x}{i}(-1)^ii=0∑x?(ix?)(?1)i
二項式反演一下:
∑i=0x(xi)(?1)i=∑i=0x(xi)(?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}=0i=0∑x?(ix?)(?1)i=i=0∑x?(ix?)(?1)i(1)x?i=(1?1)x=0
所以所有不是最大值的元素的貢獻都是0。
那么最后西格瑪的結果就是 max?(S)\max(S)max(S)。
注意:這個式子當最小值不唯一的時候依然成立,min?(T)\min(T)min(T) 的含義就變為了所有并列最小值的和。但是所求的最大值必須唯一!
總結
以上是生活随笔為你收集整理的模板:广义二项式反演/广义容斥(组合数学)的全部內容,希望文章能夠幫你解決所遇到的問題。