容斥原理,容斥係數

2022-05-02 03:21:18 字數 3872 閱讀 2207

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

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

現在我們需要統計\(ans=|u \bigcap \overline a_1 \bigcap \overline a_2 \cdots \bigcap \overline a_n |\)

有\(ans=\sum_ (-1)^|u \bigcap s_ 1 \bigcap s_ 2 \cdots \bigcap s_ |\)

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

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

我們用集合\(g_s\)來表示滿足集合\(s\)中的所有性質,並且不滿足集合\(\overline s\)中的所有性質的元素集合,即\(g _ s=\\)

那麼我們要求的就是\(g_\)。

\(ans=\sum_ (-1)^|u \bigcap s_ 1 \bigcap s_ 2 \cdots \bigcap s_ |\)

不難得知

\[\sum_ (-1)^ =

\begin

1\quad (t = \varnothing)\\

0\quad (otherwise)

\end\]

證明:\(ans=\sum_ (-1)^|u \bigcap s_ 1 \bigcap s_ 2 \cdots \bigcap s_ |\sum_ \sum_ (-1)^=g_\)

本質上還是容斥的變形。

min-max容斥的核心式子有兩個。

1.\(\min\,c\}=\max\,\min\\}\)

2.\(\max\=a+b-\min\\)

正確性顯然。

基於第乙個結論,我們猜測$$ans=\max_^n=\sum_ (-1)^\min $$

顯然可以歸納證明。

\[ans=\max_^n\=\max_^\ + a_n -\min\^\ ,a_n\}

\\=\max_^\ + a_n -\max_^\\}

\\=\sum_ (-1)^\min\ + (-1)^\min\+a_n

\\=\sum_(-1)^\min \\]

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

假設我們有長度為\(n+1\)的數列\(\\)分別代表具有性質\(a_i\)的集合元素的個數。

通常,我們需要計算的是\(s(a_i)\),即性質\(a_i\)對答案造成的貢獻。

但是某些情況下\(s(a_i)\)太難計算,我們引入長度為\(n+1\)的數列\(\\),代表具有性質\(b_j\)的集合元素個數。

假如我們可以知道關係式\(s(b_j)=\sum_^nf_s(a_i)\)。

那麼我們可以構造乙個關係\(s(a_i)=\sum_^n g_s(b_j)\)

如果我們將第乙個代入第二個會發生什麼呢?

$$s(a_i)=\sum_^n g_ \sum_^n f_ s(a_l)

\=\sum_^n s(a_l) \sum_^n g_f_$$

假如我們設\(h_=\sum_^n g_f_\),有\(s(a_i)=\sum_^n h_s(a_j)\)

顯然可以知道

$$h_=\begin

1 \quad i=j\

0 \quad i\neq j

\end$$

那麼如果我們把\(f,g,h\)都當作矩陣的話,那麼\(h\)就是單位矩陣\(e\),而且\(fg=e\)

那麼\(g=f^\)

這樣我們就得到了容斥係數矩陣\(g\),按照最暴力的方法求是\(o(n^3)\)的。

再直接帶入容斥係數就可以\(o(n^2)\)算出\(\sum_^n s(a_i)\)的值了。

等等!為什麼我碰到的容斥題都是\(n=10^5,n=2000\),從來就沒有見過可以\(o(n^3)\)做的容斥題啊。

很多時候\(b_i\)都是由我們自己構造,既然自己構造的話就可以雞賊一點,比如說我們構造\(\\),令其對\(\\)的轉移矩陣\(f\)是乙個下三角矩陣。

這樣的話就相當於\(s(b_i)=\sum_^i s(a_j) f_\),我們可以依次解出\(\\)的值。

或者對這個下三角矩陣求逆,利用矩陣\(g\)和\(\\)直接求出\(\\)。

那這樣我會\(o(n^2)\)的了,可是那些\(o(n)\)的題是怎麼做的啊。

有些時候,題目只要求求某個性質的值,比如\(s(a_n)\),按照常規做法,你就不得不遞推出其他所有的容斥矩陣。

但是如果我們一開始就知道了這些性質的容斥矩陣,豈不是就可以直接用對應的\(\\)轉移給\(a_0\)。所以,某些時候,我們可以自己手算或者打表找出轉移矩陣的容斥係數。

不過如果用矩陣來表示的容斥有時候比較繁瑣,於是便有了係數的形式。

假如我們要算\(ans=\sum_^n p_i s(a_i)\)。

可以構造容斥係數\(q_j\),令\(ans=\sum_^n q_j s(b_j)\)

有$$ans=\sum_^n q_j\sum_^n f_ s(a_i)

\=\sum_^n s(a_i)\sum_^n q_j f_ =\sum_^n p_i s(a_i)$$

有等式$$p_i=\sum_^n f_ q_j$$

如果\(f\)是上三角或者下三角矩陣,我們求出\(q_j\)就只需要\(o(n^2)\)的時間。

特別的,如果\(f_\)可以被表示成兩個函式如\(h(j)\)與\(h(i-j)\)的積,那麼上式還是乙個卷積的形式,可以多項式求逆在\(o(nlogn)\)的時間內求出容斥係數。

大多數情況下,容斥係數都是有跡可尋的,可以猜想一些可靠的容斥係數然後自己手推式子或者打表證明一下,當然複雜度允許的話也可以遞推或者對矩陣求逆。

在特殊情況下,還有一些經典的容斥係數。

1.組合數形式的容斥(二項式反演):

\[q_n=\sum_^n \binom p_i \leftrightarrow p_n=\sum_^n (-1)^ \binom q_i

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

\[q_n=\sum_ p_d \leftrightarrow p_n=\sum_ \mu( ) q_d

\]\[q_n=\sum_ p_d \leftrightarrow p_n=\sum_ \mu( ) q_d

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

\[q_n=\sum_^\beginn \\ i\endp_i \leftrightarrow p_n=\sum_^(-1)^\beginn \\ i\endq_i

\]upd:對於三個反演的證明。

1.二項式反演

由二項式定理可知,

\[(x+1)^n=\sum_^n \binom x^i \quad[1]\\

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

將\([2]\)帶入\([1]\)得到等式\([n=i]=\sum_^n (-1)^\binom \binom \)

將反演式子互相帶入可以得到等價與該等式。

2.莫比烏斯反演(只證第乙個)

莫比烏斯函式滿足性質,\([n=1]=\sum_ \mu(d)\)。

即滿足與衡等函式\(i\)的狄利克雷卷積為單位函式\(e\),\((\mu * i)(n)=e(n)=[n=1]\)

當然這是狄利克雷卷積,如果是矩陣的話,那麼就是矩陣

\(\mu_=[j|i]mu() ,i_=[j|i]\)相乘,顯然這是滿足\(\mu i=e\)的。

第二個的證明就是把整除符號的兩邊反過來,本質上沒有什麼區別。

3.斯特林反演

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

容斥原理 數論

兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...

容斥原理,反演

大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...

關於容斥原理

容斥原理大概是這樣的,以長方體體積並為例,我們需要用容斥原理容斥出若干個長方體體積的並.首先,我們將每個長方體標號為1 n,那麼這些長方體的取捨顯然可以表示為乙個二進位制的數字s.設f s 表示長方體取捨狀態為s時,長方體的體積並,於是我們可以知道f 111111 有n個1 就是我們最終的所求.好,...