[學習筆記]容斥?反演?
部分內容也是 2013 年國家集訓隊論文《淺談容斥原理》[1]中的。還有一些來源於《炫酷反演魔術》[2]。另外有一些來源於 \(\sf Quack\) 的課件,最後還有一些雜爛文章就是來源於我自己了......
不一定完結,隨機更新。
基本容斥
假設有 \(n\) 個性質 \(P_1,P_2,\cdots,P_n\),在全集 \(U\) 中滿足這些性質的元素分別為 \(S_1,S_2,\cdots,S_n\).
最基本的容斥形式如下:
\[\left|\bigcup_{i=1}^n S_i\right|=\sum_i|S_i|-\sum_{i<j}|S_i\cap S_j|+\sum_{i<j<k}|S_i\cap S_j\cap S_k|-\cdots+(-1)^{n-1}|S_1\cap S_2\cap S_3\cdots \cap S_n| \]考慮一個屬於 \(T_1,T_2\cdots,T_m\)
然後,我們可以稍加推廣,得到另外的一個形式:
\[\norm{\bigcap_{i=1}^n S_i}=\norm U-\norm{\bigcup_{i=1}^n \bar{S_i}} \]舉個例子:錯位排列。
對於性質 \(P_i\),其表示 \(\sigma_i\neq i\),而我們的目標是求 \(\displaystyle \norm{\bigcap_{i=1}^n S_i}\),根據上面的容斥形式,需要用到 \(\bar{S_i}\)
化簡的關鍵在於我們發現無論取多少個集合的交,交的大小都只和集合個數有關,這也是錯排的通項公式是非指數級的關鍵。
二項式反演
前面的公式,其核心還是最開始那個證明的式子:
\[\sum_{i=1}^m (-1)^{i-1}{m\choose i}=-\brak{(1-1)^m-1}=1 \]如果你再細心一點,將會發現,同一行的組合數交錯和為 \(0\),即:
\[\sum_{i=0}^m (-1)^i{m\choose i}=0 \]嚴謹地,實際上
\[\sum_{i=0}^m (-1)^i{m\choose i}=[m=0] \]再來看看前面的錯排,如果設 \(f(n)\) 表示任意一個排列方案數,\(g(n)\) 表示滿足了 \(P\) 中的 \(n\) 個的方案數,那麼,我們列舉到底是哪 \(n\) 個錯開,就可以由 \(g\) 得到 \(f\):
\[f(n)=\sum_{i=0}^n{n\choose i}g(i) \]現在的問題是:\(f(n)=n!\),而 \(g(n)\) 不知道,也就是說,我們想要從 \(f\) 推到 \(g\),但是目前只能由 \(g\) 得到 \(f\).
但是沒有關係,推一推式子,設 \(\displaystyle g(n)=\sum_{i=0}^n{n\choose i}\lambda(i)f(i)\),其中 \(\lambda(i)\) 表示容斥係數,那麼
\[\begin{aligned} g(n)&=\sum_{i=0}^n\lambda(i){n\choose i}\sum_{j=0}^i{i\choose j}g(j) \\ &=\sum_{i=0}^n\sum_{j=0}^i\lambda(i){n\choose i}{i\choose j}g(j) \\ &=\sum_{i=0}^n\sum_{j=0}^i\lambda(i){n\choose j}{n-j\choose i-j}g(j) \\ &=\sum_{j=0}^n{n\choose j}\sum_{i=j}^n\lambda(i){n-j\choose i-j}g(j) \end{aligned} \]然後就會發現,需要滿足 \(\displaystyle {n\choose j}\sum_{i=j}^n\lambda(i){n-j\choose i-j}=[j=n]=[n-j=0]\),顯然 \(\displaystyle{n\choose j}\neq 0(j\in [0,n]\cap\Z)\),因此,\(\displaystyle \sum_{i=j}^n\lambda(i){n-j\choose i-j}=[j=n]=[n-j=0]\),於是:
\[\displaystyle \sum_{i=j}^n\lambda(i){n-j\choose i-j}=\sum_{i=0}^{n-j}(-1)^i{n-j\choose i} \\ \Rightarrow \sum_{i=0}^{n-j}\lambda(i+j){n-j\choose i}=\sum_{i=0}^{n-j}(-1)^i{n-j\choose i} \]因此,\(\lambda(i+j)=(-1)^i\),即 \(\lambda(i)=(-1)^{i-j}\),你發現消不了 \(-j\) 這一項,但是沒有關係,可以將右邊的 \((-1)^i\) 改寫成 \((-1)^{n-j-i}\),此時你會發現 \(\lambda(i+j)=(-1)^{n-i-j}\),因此 \(\lambda(i)=(-1)^{n-i}\).
其實還有更簡單的證明:
\[f(n)=\sum_{i=0}^n\frac{n!}{i!(n-i)!}g(i)\Rightarrow\frac{f(n)}{n!}=\sum_{i=0}^n\frac{g(i)}{i!}\times \frac{1}{(n-i)!} \]因此,有
\[\hat F=\hat G\times e^x\Rightarrow \hat G=\hat F\times e^{-x}\Rightarrow \frac{g(n)}{n!}=\sum_{i=0}^n\frac{(-1)^{n-i}}{(n-i)!}\frac{f(i)}{i!}\Rightarrow g(n)=\sum_{i=0}^n(-1)^{n-i}{n\choose i}f(i) \]
兩步解決(
至此,我們得到了二項式反演的一個形式:
\[f(n)=\sum_{i=0}^n{n\choose i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}f(i) \]另外一個形式:
\[f(n)=\sum_{i=0}^n(-1)^i{n\choose i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^n(-1)^i{n\choose i}f(i) \]數論中的容斥原理
考察 \(\varphi(n)=\norm{\set{x|1\le x\le n\land\gcd(x,n)=1}}\),要計算 \(\varphi(n)\),我們可以用 \(\displaystyle n=\prod_{i=1}^c p_i^{t_i}\) 中 \(n\) 的所有質因子來進行容斥 —— 因為所謂 \(\gcd(x,n)=1\),實際上就是 \(x\) 不含有任何一個 \(p_i\),定義性質 \(P_i\) 表示元素不含有質因子 \(p_i\),那麼,目標是 \(\displaystyle \norm{\bigcap_{i=1}^c S_i}\),又可以進行容斥:
\[\varphi(n)=\displaystyle \norm{\bigcap_{i=1}^c S_i}=\norm U-\norm{\bigcup_{i=1}^c \bar{S_i}}=n-\sum_i\frac{n}{p_i}+\sum_{i<j}\frac{n}{p_ip_j}-\cdots+(-1)^c\frac{n}{\prod_{i=1}^c p_i} \\ \Rightarrow \varphi(n)=n\prod_{i=1}^n \brak{1-\frac{1}{p_i}} \]這就是尤拉公式了。
當然,如果你足夠細心,你會發現我們實際上只在質數上進行容斥,並且在容斥的過程中,取的質數次數均為一次,因此這些質數任意選出一些,他們的乘積仍然是一個__無平方因子數__,而無平方因子數的容斥係數,顯然只和其含有多少個質因數有關,因此,我們可以在正整數集上,再定義一個專門針對無平方因子數的函式,它的正負號取決於無平方因子數含有的質數個數,這樣,我們就得到了莫比烏斯函式:
\[\mu(n)=\begin{cases} 1&n=1 \\[2ex] (-1)^k&n=\prod_{i=1}^kp_i \\[2ex] 0&\text{otherwise} \end{cases} \]因此我們可以得到另外的一個關於 \(\varphi(n)\) 的表示式:\(\displaystyle \varphi(n)=\sum_{d\mid n}\mu(d)\frac{n}{d}\).
概率論中的容斥
對於__同一概率空間中__的事件 \(A_1,A_2,\cdots,A_n\),依然存在相似的容斥原理:
\[\text{P}\brak{\bigcup_{i=1}^nA_i}=\sum_{i}\text{P}(A_i)-\sum_{i<j}\text{P}(A_i\cap A_j)+\sum_{i<j<k}\text{P}(A_i\cap A_j\cap A_k)-\cdots+(-1)^{n-1}\text{P}\brak{\bigcap _{i=1}^n A_i} \]對於概率只和事件個數有關,那麼還可以簡化為:
\[\text{P}\brak{\bigcup _{i=1}^n A_i}=\sum_{i=1}^n(-1)^{i-1}{n\choose i}a_i \]一般形式的容斥原理
對於兩個關於集合的函式 \(f(S),g(S)\),若
\[f(S)=\sum_{T\subset S}g(T) \]那麼就有
\[g(S)=\sum_{T\subset S}(-1)^{\norm S-\norm T}f(T) \]另外一個形式:
\[f(S)=\sum_{T\supset S}g(T)\Leftrightarrow g(S)=\sum_{T\supset S}(-1)^{\norm S-\norm T}f(T) \]這個形式只需要將上面取補集即可。
這兩個東西也被稱為子集反演。
MinMax容斥(MinMax反演)
這個東西就是可以讓 \(\min\) 和 \(\max\) 到處換過來換過去。最基本的式子:
\[\max(S)=\sum_{T\subset S}(-1)^{\norm T+1}\min(T) \\ \min(S)=\sum_{T\subset S}(-1)^{\norm T+1}\max(T) \]證明就考慮每一項是否能對上,由於兩個式子長得差不過,就證上面那個。
考慮當前元素是 \(S\) 中第 \(k\) 大的,那麼這個元素左邊的係數就是 \([k=1]\),右邊的係數,它要作為 \(T\) 中最小的,就是隻在它或者比它大的元素中選,因此右邊的係數是 \(\displaystyle \sum_{i=1}^{k}(-1)^{i+1}{k-1\choose i-1}=\sum_{i=0}^{k-1}(-1)^{i+2}{k-1\choose i}=\sum_{i=0}^{k-1}(-1)^{i}{k-1\choose i}=[k-1=0]=[k=1]\),得證。
它還可以推廣為 \(\rm kthmax\),設 \(\text{kthmax}(S)\) 表示 \(S\) 中第 \(k\) 大的,它依然可以使用 \(\min\) 來表達,至於容斥係數,考慮使用待定係數法來解,假設當前的元素是第 \(p\) 大的,那麼我們要解的是
\[\begin{aligned}{} [p=k]&=\sum_{i=1}^p\lambda(i){p-1\choose i-1} \\ &=\sum_{i=0}^{p-1}\alpha(i){p-1\choose i}&{\alpha(i)=\lambda(i+1)} \\ \end{aligned} \]將其二項式反演,可以得到
\[\alpha(p-1)=\sum_{i=0}^{p-1}(-1)^{p-1-i}{p-1\choose i}[i=k-1]=(-1)^{p-k}{p-1\choose k-1} \]因此 \(\displaystyle \lambda(i)=\alpha(i-1)=(-1)^{i-k}{i-1\choose k-1}\),所以可以得到 \(\rm kthmax\) 的式子:
\[\text{kthmax}(S)=\sum_{T\subset S,\norm T\ge k}(-1)^{\norm T-k}{\norm T-1\choose k-1}\min(T) \]當然,它也是可以用在期望上面的:
\[E(\max(S))=\sum_{T\subset S}(-1)^{\norm T+1}E(\min(T)) \]然後它就可以做題了。
先寫到這裡
還有的斯特林反演之類的東西......