容斥原理,容斥系数

容斥原理,容斥系数

众所周知,容斥原理是计数问题中最鸡贼的东西.基本上不少计数问题都要用到容斥,可是有的时候你明明知道要容斥就是不知道怎么容斥.因此特此写在这里总结一下.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

相关文章
相关标签/搜索