容斥原理,容斥系數


容斥原理,容斥系數

眾所周知,容斥原理是計數問題中最雞賊的東西.基本上很多計數問題都要用到容斥,但是有的時候你明明知道要容斥就是不知道怎么容斥.所以特此寫在這里總結一下.

1.簡單傻逼的容斥原理。

一般來說,這種容斥原理一般有n個性質,滿足第\(i\)個性質的元素集合為\(A_i\),還有一個全集\(U\)

現在我們需要統計\(ans=|U \bigcap \overline A_1 \bigcap \overline A_2 \cdots \bigcap \overline A_n |\)

\(ans=\sum_ {S \subseteq A}(-1)^{|S|}|U \bigcap S_ 1 \bigcap S_ 2 \cdots \bigcap S_ {|S|} |\)

如果用組合意義來說的話,\(x \in A_i\)是代表元素\(x\)具有性質\(i\),我們要求的就是不具有所有性質的元素個數。

這個這個定理的證明如下。

我們用集合\(G_S\)來表示滿足集合\(S\)中的所有性質,並且不滿足集合\(\overline S\)中的所有性質的元素集合,即\(G _ S=\{ x|\forall A _ i\in S,x \in A _ i , \forall A _ i\in \overline S,x \notin A _ i \}\)
那么我們要求的就是\(G_{\varnothing}\)
\(ans=\sum_ {S \subseteq A}(-1)^{|S|}|U \bigcap S_ 1 \bigcap S_ 2 \cdots \bigcap S_ {|S|} |\)
不難得知

\[\sum_{T \subseteq S,S \neq \varnothing} (-1)^{|S|} = \begin{cases} 1\quad (T = \varnothing)\\ 0\quad (otherwise) \end{cases}\]

證明:\(ans=\sum_ {S \subseteq A}(-1)^{|S|}|U \bigcap S_ 1 \bigcap S_ 2 \cdots \bigcap S_ {|S|} |\sum_{G_T} \sum_{T \subseteq S,S \neq \varnothing} (-1)^{|S|}=G_{\varnothing}\)
  

2.Min-Max容斥

本質上還是容斥的變形。
Min-Max容斥的核心式子有兩個。
1.\(\min\{\max\{a,b\},c\}=\max\{\min\{a,c\},\min\{b,c\}\}\)
2.\(\max\{a,b\}=a+b-\min\{a,b\}\)
正確性顯然。
基於第一個結論,我們猜測$$ans=\max_{i=1}^n{a_i}=\sum_{ T \subseteq A} (-1)^{|T|+1}\min { T}$$
顯然可以歸納證明。

\[ans=\max_{i=1}^n\{a_i\}=\max_{i=1}^{n-1}\{a_i\} + a_n -\min\{\max_{i=1}^{n-1}\{a_i\} ,a_n\} \\=\max_{i=1}^{n-1}\{a_i\} + a_n -\max_{i=1}^{n-1}\{\min\{a_i ,a_n\}\} \\=\sum_{ T \subseteq A} (-1)^{|T|+1}\min\{ T\} + (-1)^{|T|+2}\min\{T,a_n\}+a_n \\=\sum_{ T \subseteq A}(-1)^{|T|+1}\min \{ T\}\]

upd:上面寫的證明太復雜了,其實只需要按照元素大小排序,那么可以化歸到已知的簡單容斥里去了。

3.更加毒瘤的容斥原理

假設我們有長度為\(n+1\)的數列\(\{|A_i|\}\)分別代表具有性質\(A_i\)的集合元素的個數。
通常,我們需要計算的是\(s(A_i)\),即性質\(A_i\)對答案造成的貢獻。
但是某些情況下\(s(A_i)\)太難計算,我們引入長度為\(n+1\)的數列\(\{|B_j|\}\),代表具有性質\(B_j\)的集合元素個數。
假如我們可以知道關系式\(s(B_j)=\sum_{i=0}^nf_{j,i}s(A_i)\)
那么我們可以構造一個關系\(s(A_i)=\sum_{j=0}^n g_{i,j}s(B_j)\)
如果我們將第一個代入第二個會發生什么呢?
  $$s(A_i)=\sum_{j=0}^n g_{i,j} \sum_{l=0}^n f_{j,l} s(A_l)
  \=\sum_{l=0}^n s(A_l) \sum_{j=0}^n g_{i,j}f_{j,l}$$
假如我們設\(h_{i,l}=\sum_{i=0}^n g_{i,j}f_{j,l}\),有\(s(A_i)=\sum_{j=0}^n h_{i,j}s(A_j)\)
顯然可以知道
  $$h_{i,j}=\begin{cases}
1 \quad i=j\
0 \quad i\neq j
  \end{cases}$$
那么如果我們把\(F,G,H\)都當作矩陣的話,那么\(H\)就是單位矩陣\(E\),而且\(FG=E\)
那么\(G=F^{-1}\)
這樣我們就得到了容斥系數矩陣\(G\),按照最暴力的方法求是\(O(n^3)\)的。
再直接帶入容斥系數就可以\(O(n^2)\)算出\(\sum_{i=0}^n s(A_i)\)的值了。
  
等等!為什么我碰到的容斥題都是\(n=10^5,n=2000\),從來就沒有見過可以\(O(n^3)\)做的容斥題啊。
很多時候\(B_i\)都是由我們自己構造,既然自己構造的話就可以雞賊一點,比如說我們構造\(\{B_i\}\),令其對\(\{A_i\}\)的轉移矩陣\(F\)是一個下三角矩陣。
這樣的話就相當於\(s(B_i)=\sum_{j=0}^i s(A_j) f_{i,j}\),我們可以依次解出\(\{A_i\}\)的值。
或者對這個下三角矩陣求逆,利用矩陣\(G\)\(\{B_i\}\)直接求出\(\{A_i\}\)
那這樣我會\(O(n^2)\)的了,可是那些\(O(n)\)的題是怎么做的啊。
有些時候,題目只要求求某個性質的值,比如\(s(A_n)\),按照常規做法,你就不得不遞推出其他所有的容斥矩陣。
但是如果我們一開始就知道了這些性質的容斥矩陣,豈不是就可以直接用對應的\(\{B_i\}\)轉移給\(a_0\)。所以,某些時候,我們可以自己手算或者打表找出轉移矩陣的容斥系數。
不過如果用矩陣來表示的容斥有時候比較繁瑣,於是便有了系數的形式。
假如我們要算\(ans=\sum_{i=0}^n p_i s(A_i)\)
可以構造容斥系數\(q_j\),令\(ans=\sum_{j=0}^n q_j s(B_j)\)
有$$ans=\sum_{j=0}^n q_j\sum_{i=0}^n f_{j,i} s(A_i)
\=\sum_{i=0}^n s(A_i)\sum_{j=0}^n q_j f_{j,i} =\sum_{i=0}^n p_i s(A_i)$$
有等式$$p_i=\sum_{j=0}^n f_{j,i} q_j$$
如果\(F\)是上三角或者下三角矩陣,我們求出\(q_j\)就只需要\(O(n^2)\)的時間。
特別的,如果\(f_{j,i}\)可以被表示成兩個函數如\(h(j)\)\(h(i-j)\)的積,那么上式還是一個卷積的形式,可以多項式求逆在\(O(nlogn)\)的時間內求出容斥系數。
大多數情況下,容斥系數都是有跡可尋的,可以猜想一些可靠的容斥系數然后自己手推式子或者打表證明一下,當然復雜度允許的話也可以遞推或者對矩陣求逆
在特殊情況下,還有一些經典的容斥系數。
  
1.組合數形式的容斥(二項式反演):

\[q_n=\sum_{i=0}^n \binom{n} {i} p_i \Leftrightarrow p_n=\sum_{i=0}^n (-1)^{n-i} \binom {n} {i} q_i \]

  
2.倍數關系的容斥(莫比烏斯反演)。

\[q_n=\sum_{d|n} p_d \Leftrightarrow p_n=\sum_{d|n} \mu( {n \over d}) q_d \]

\[q_n=\sum_{n|d} p_d \Leftrightarrow p_n=\sum_{n|d} \mu( {d \over n}) q_d \]

  
3.斯特林數形式的容斥(斯特林反演)。

\[q_n=\sum_{i=1}^{n}\begin{Bmatrix}n \\ i\end{Bmatrix}p_i \Leftrightarrow p_n=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n \\ i\end{bmatrix}q_i \]

upd:對於三個反演的證明。
1.二項式反演
由二項式定理可知,

\[(x+1)^n=\sum_{i=0}^n \binom {n} {i} x^i \quad[1]\\ x^n=\sum_{i=0}^n (-1)^{n-i}\binom {n} {i} (x+1)^i \quad[2]\]

\([2]\)帶入\([1]\)得到等式\([n=i]=\sum_{i=0}^n (-1)^{j-i}\binom {i}{j} \binom {n}{i}\)
將反演式子互相帶入可以得到等價與該等式。

2.莫比烏斯反演(只證第一個)
莫比烏斯函數滿足性質,\([n=1]=\sum_{d|n} \mu(d)\)
即滿足與衡等函數\(I\)的狄利克雷卷積為單位函數\(e\),\((\mu * I)(n)=e(n)=[n=1]\)
當然這是狄利克雷卷積,如果是矩陣的話,那么就是矩陣
\(\mu_{i,j}=[j|i]mu({i \over j}) ,I_{i,j}=[j|i]\)相乘,顯然這是滿足\(\mu I=E\)的。
第二個的證明就是把整除符號的兩邊反過來,本質上沒有什么區別。

3.斯特林反演
可以去看我的另外一篇博文第二類斯特林數總結


免責聲明!

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



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