從 簡單容斥 到 min-max 容斥 與 二項式反演


證明基本都是自己瞎證的,如果證法比較丑請見諒。

容斥原理

一道小學題\(n(n\le 10^9)\) 以內不能被 \(2,3,5\) 整除的整數個數。

VCSXLQ@HL_N79HFO_3V8CSF.png

考慮這個 Venn 圖。三個圓分別表示被 \(2,3,5\) 整除的數構成的集合,那么要求的就是圓外的面積。

假設什么限制也不管,只管一共有 \(n\) 個數,那么每塊都是算一遍。

圓外的面積自然就是總面積減去里面的,我們想到 \(n-\lfloor \frac{n}{2}\rfloor-\lfloor \frac{n}{3}\rfloor-\lfloor \frac{n}{5}\rfloor\)

你發現重合的部分多扣了,所以你又把兩兩的重合部分加上,現在你的答案是 \(n-\lfloor\frac{n}{2}\rfloor-\lfloor\frac{n}{3}\rfloor-\lfloor\frac{n}{5}\rfloor+\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor\)

你發現中間(三圓重合的部分)又多出來了,把它減掉。\(n-\lfloor\frac{n}{2}\rfloor-\lfloor\frac{n}{3}\rfloor-\lfloor\frac{n}{5}\rfloor+\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor-\lfloor\frac{n}{2\times 3\times 5}\rfloor\)

你發現它完美了:該算的被算了一遍,別的被算了零遍。


考慮一個比較一般的容斥的式子:

\(A_1\)\(A_n\)\(n\) 個集合,\(U=\{1,2,\cdots ,n\}\)。那么

\[|\bigcup_{i=1}^n A_i|=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}|\bigcap_{i\in S}A_i| \]

為什么這是對的?

考慮一個元素。假設它出現在了 \(n\) 個集合中的 \(k(k>0)\) 個。則它的貢獻恰好是
\(\sum_{i=1}^k (-1)^{i-1}\binom ki\\ =1-\sum_{i=0}^k (-1)^i\binom ki\\ =1-(-1+1)^k\\ =1\)
。我們發現有出現過的算了一次,沒出現過的算了零次。

根據上面的經驗,我們發現,容斥就是通過加加減減的方式,使得符合要求的方案算到恰好一遍,其他方案算到零遍,以做到不重不漏不多不少。

二項式反演

小學題加強版\(k=0,1,2,3\),分別求出 \(n(n\le 10^9)\) 以內恰能被 \(2,3,5\) 中的 \(k\) 個整除的整數個數。

先考慮 \(k=3\),這時候答案顯然是三圓重合的部分,就是 \(f_3=\lfloor\frac{n}{2\times 3\times 5}\rfloor\)

然后是 \(k=2\),這時我們想到 \(\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor\)。但是你發現中間那塊被多算了 \(3\) 遍,於是有 \(f_2=\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor-\binom 32f_3\) 了。

接下來算 \(k=1\),和剛才一樣,你算出了 \(f_1=\lfloor\frac{n}{2}\rfloor+\lfloor\frac{n}{3}\rfloor+\lfloor\frac{n}{5}\rfloor-\binom 21f_2-\binom 31f_3\)

那么 \(f_0=n-\binom 10f_1-\binom 20f_2-\binom 30f_3\)


考慮比較一般的問題。你有 \(n\) 個限制,對所有的 \(k\),要求出滿足恰好 \(k\) 個限制的方案數。

對於一個 \(k\),你強行欽定它滿足其中 \(k\) 個條件,而算出答案為 \(g_k\);記最后的答案為 \(f_k\)。那么根據剛才的經驗,很明顯:

\[f_k= g_k-\sum_{j=k+1}^n\binom jk f_j \]

但這個復雜度是 \(n^2\) 的,有時候 \(n\) 很大,你算不了。有沒有更快的做法?

那你移個項,容易得到:\(g_k=\sum_{j=k}^n\binom jk f_j\)

組合數拆出來:\(k!g_k=\sum_{j=k}^n \frac{1}{(j-k)!}j!f_j\)

\(g'_k=g_{n-k}(n-k)!,f'_k=f_{n-k}(n-k)!\)。那么 \(g'_k=\sum_{j=0}^k\frac{1}{(k-j)!}f'_j\)

然后是喜聞樂見的生成函數環節。\(G_1(x)=\sum_i g'_ix^i,F_1(x)=\sum_i f'_ix^i\)

那么就有 \(G_1(x)=e^xF_1(x)\)。所以 \(F_1(x)=e^{-x}G_1(x)\)。而 \(e^{-x}=\sum_i (-1)^i\frac{x^i}{i!}\)

這時候我們就有了明顯的思路:先從 \(g\) 數組轉成 \(G_1(x)\),然后使用 FFT/NTT 做卷積,算出 \(F_1(x)\),然后轉成 \(f\) 數組。

時間復雜度 \(O(n\log n)\)


但是有時候我們不僅想這樣求,還想把式子給他寫得漂亮些。

剛剛我們推到了 \(F_1(x)=e^{-x}G_1(x)\),其中 \(e^{-x}=\sum_i (-1)^i\frac{x^i}{i!}\)

也就是 \(f'_k=\sum_{j=0}^k\frac{(-1)^{k-j}}{(k-j)!}g'_j\)

\(k!f_k=\sum_{j=k}^n\frac{(-1)^{j-k}}{(j-k)!}j!g_j\)

\(f_k=\sum_{j=k}^n\binom jk(-1)^{k-j}g_j\)。事實上啊,

\[g_k=\sum_{j=k}^n\binom jk f_j\Leftrightarrow f_k=\sum_{j=k}^n\binom jk(-1)^{k-j}g_j \]

這個式子就是二項式反演了。二項式反演還有更好看的形式:

\[f_n=\sum\limits_{j=0}^n(-1)^j{n\choose j}g_j\Leftrightarrow g_n=\sum\limits_{j=0}^n(-1)^j{n\choose j}f_j \]

min-max 容斥

再看看這個容斥的式子:

\(A_1\)\(A_n\)\(n\) 個集合,\(U=\{1,2,\cdots ,n\}\)。那么\( |\bigcup_{i=1}^n A_i|=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}|\bigcap_{i\in S}A_i| \)
試試把 \(\bigcup\) 換成 \(\max\),把 \(\bigcap\) 換成 \(\min\),集合 \(A_i\) 改成數 \(a_i\) 吧。那么得到:

\[\max_{i=1}^n a_i=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\min_{i\in S}a_i \]

舉個例子:
\( \max\{2,3,4\}\\ =\min\{2\}+\min\{3\}+\min\{4\}-\min\{2,3\}-\min\{2,4\}-\min\{3,4\}+\min\{2,3,4\}\\ =2+3+4-2-2-3+2 =4 \)

你發現它竟然是對的!

能證明嗎?

一樣的思路,不妨假設 \(a_1\le a_2\le \cdots\le a_n\)。考慮 \(a_x\) 被算到的次數,為:
\(\sum_{i=0}^{n-x}\binom {n-x}i (-1)^{n-x}\)
(它要是子集的最小值,該子集的其他元素就只能選后面的)。

\(k<n\) 時,化為 \((-1+1)^{n-k}=0\);當 \(k=n\) 時,化為 \(1\)

故只有最大的那個值貢獻到了答案,它就是對的。這就是 min-max 容斥。

但是你覺得這個東西很蠢,最大值明明可以直接算。

之所以要拿出來說,是因為 min-max 容斥在期望下也是對的。

也就是說,

\[E(\max_{i=1}^n x_i)=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}E(\min_{i\in S}x_i) \]

成立。


舉例說明:袋子里有 \(n(n\le 20)\) 種顏色的球,每一回合你會拿出一個球然后放回,摸出的球為第 \(i\) 種顏色的概率為 \(p_i(\sum p_i=1)\)。求期望多少回合后,每種顏色都摸到過至少一次。(HDU4336)

設第 \(i\) 種顏色期望 \(x_i\) 次被第一次摸到,則答案是 \(E(\max_{i=1}^n x_i)\)

你發現 \(E(\max x_i)\) 不好求,\(E(\min_{i\in S}x_i)\) 還比較好求,為 \(\frac{1}{\sum_{i\in S} p_i}\)

套用剛剛的式子,就得到
\( E(\max_{i=1}^n x_i)\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}E(\min_{i\in S}x_i)\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\frac{1}{\sum_{i\in S} p_i} \)

\(n\) 只有 \(20\),直接算就行了。


Wait! 但是我們還沒證明 min-max 容斥在期望下也是對的呢!

考慮在這里計算期望的一種方法:

\(E(\max_{i=1}^n x_i)=\sum_tP(x=t)\max_{i=1}^n t_i\)
\(E(\min_{i=1}^n x_i)=\sum_tP(x=t)\min_{i=1}^n t_i\)

其中 \(t\) 是一個長度為 \(n\) 的序列。

\(E(\max_{i=1}^n x_i)\\ =\sum_tP(x=t)\max_{i=1}^n t_i\\ =\sum_tP(x=t)\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\min_{i\in S}t_i\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\sum_tP(x=t)\min_{i\in S}t_i\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}E(\min_{i\in S}x_i) \)

嗯,這樣就證完了,也沒啥意思。


還有更強的式子
\(U=\{1,2,\cdots ,n\}\)\(\operatorname{kthmax}_{i=1}^n a_i\)\(a\) 數組的第 \(k\) 大值,則:

\[\operatorname{kthmax}_{i=1}^n a_i=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}\min_{i\in S}a_i \]

(規定 \(n<m\)\(\binom nm=0\)

證明:
不妨假設 \(a_1\le a_2\le \cdots\le a_n\)
\(\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}\min_{i\in S}a_i\\ =\sum_{i=1}^n a_i\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}[a_i=\min_{j\in S}a_j]\\ =\sum_{i=1}^n a_i\sum_{j=k}^n\binom{n-i}{j-1}\binom{j-1}{k-1}(-1)^{j-k}\)
對於組合數,有等式 \(\binom ab\binom bc=\binom ac\binom{a-c}{b-c}\)。於是:
\( =\sum_{i=1}^n a_i\sum_{j=k}^n\binom{n-i}{k-1}\binom{n-i-k+1}{j-k}(-1)^{j-k}\\ =\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=k}^n\binom{n-k+1-i}{j-k}(-1)^{j-k}\\ =\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j} \)
\(i=n-k+1\) 時,\(\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=1\)
否則 \(\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=0\)
所以 \(\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=\operatorname{kthmax}_{i=1}^n a_i\)
於是證完了。

於是又有

\[E(\operatorname{kthmax}_{i=1}^n x_i)=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}E(\min_{i\in S}x_i) \]

EXTRA

其實還有一個關於 \(\gcd\)\(\operatorname{lcm}\) 的容斥。

它長這樣:\(\operatorname{lcm}_{i=1}^n a_i=\prod_{S\subset U,S\ne \emptyset}(\gcd_{i\in S}a_i)^{(-1)^{|S|-1}}\)

其中 \(U=\{1,2,\cdots ,n\}\)

為什么對?你考慮 \(a_i=\prod_k p_k^{\alpha_k}\)

  • 取兩個數的 \(\gcd\) 就是每個 \(\alpha\)\(\min\)
  • 取兩個數的 \(\operatorname{lcm}\) 就是每個 \(\alpha\)\(\max\)
  • 兩個數相乘就是 每個 \(\alpha\) 求和;
  • 兩個數相除就是 每個 \(\alpha\) 求差。

於是那個式子就相當於對每個 \(\alpha\) 同時搞了個 min-max 容斥,自然就是對的了。

例題

二項式反演

luogu P4859 已經沒有什么好害怕的了

luogu P4491 染色

luogu P5401 珍珠

min-max 容斥

HDU 4336 Card Collector

luogu P3175 按位或

HDU4624 Endless Spin

BZOJ 4833 最小公倍佩爾數

luogu P4707 重返現世

AGC 038E Gachapon


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM