容斥原理,容斥係數

容斥原理,容斥係數

衆所周知,容斥原理是計數問題中最雞賊的東西.基本上不少計數問題都要用到容斥,可是有的時候你明明知道要容斥就是不知道怎麼容斥.因此特此寫在這裏總結一下.html

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\}\]spa

upd:上面寫的證實太複雜了,其實只須要按照元素大小排序,那麼能夠化歸到已知的簡單容斥裏去了。htm

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\]blog

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\)的。
第二個的證實就是把整除符號的兩邊反過來,本質上沒有什麼區別。get

3.斯特林反演
能夠去看個人另一篇博文第二類斯特林數總結class

相關文章
相關標籤/搜索