容斥原理与子集反演

我刚开始学子集反演很多时候都是碰运气去用,就很没道理。如果能把容斥原理和子集反演一起运用会好一些吧。

容斥原理

容斥原理是对于集合说的。形式为有 \(n\) 个集合 \(S_1\sim S_n\),则有:

\[\bigcup\limits_{1}^{n} S_i=\sum_{i=1}^n (-1)^{i-1} \sum_{x_1\dots x_i} \bigcap_{1}^{i}S_{x_i} \]

其实就是枚举这 \(n\) 个集合的一个子集,其中 \(i\) 是集合大小。证明方法大概考虑每个元素被多少个集合包含,设其被 \(S_{a_1}\dots S_{a_m}\) 包含,则其被计算的次数为

\[\sum_{i=1}^m \dbinom{m}{i}(-1)^{i-1}=1 \]

所以得到的就是交集。

子集容斥/子集反演

我觉得这俩是一个名词。形式是对于任意由集合为自变量映射到什么的函数 \(f(S),g(T)\),有以下反演形式以及补集形式:

\[\begin{aligned} f(S)=\sum_{T\subseteq S}g(T)&\Leftrightarrow g(S)=\sum_{T\subseteq S} (-1)^{|S|-|T|} f(T)\\ f(S)=\sum_{S\subseteq T}g(T)&\Leftrightarrow g(S)=\sum_{S\subseteq T} (-1)^{|T|-|S|} f(T) \end{aligned}\]

先来证明它吧!也许比较好的证明方式就只能把两个式子互相带入。那么把第一个形式左侧等式带入第一个形式右侧等式的右边,证明第一个形式:

\[\begin{aligned} g(S)&=\sum_{T\subseteq S} (-1)^{|S|-|T|}\sum_{H\subseteq T} g(H)\\ &=\sum_{H\subseteq S} g(H) \sum_{H\subseteq T\subseteq S} (-1)^{|S|-|T|}\\ &=\sum_{H\subseteq S} g(H)\sum_{i=0}^{|S|-|H|} \dbinom{|S|-|H|}{i} (-1)^{i} \end{aligned}\]

然后后一个求和相当于 \(h(x)=\sum_{i=0}^h \dbinom{h}{i}(-1)^i\) 于是有 \(h(0)=1\),且 \(x\not= 0\) 的时候有

\[h(x)=1+\sum_{i=1}^{x} \dbinom{x}{i}(-1)^i=1+-1=0 \]

于是只有 \(|S|-|X|=0\) 的那一项被算了一次,其它项都被算了 \(0\) 次,于是等式右边就是 \(g(S)\) 故而得证。

然后两个形式就相当于把集合都替换成补集嘛,可以等价。

一种二者的关系

如果把这里的 \(f(S)\) 换成集合运算,就一个元素被加了就多算一次,被减了就少算一次那种,似乎可以通过定义得到容斥原理。

比如说我有一堆集合 \(A_1\dots A_n\),以及一个全集 \(U\),注意这里并不是说所有 \(A\) 的并是 \(U\)。接下来的 \(f(S)\)\(g(S)\) 中自变量集合 \(S\) 均为 \(1\dots n\) 的子集。那么定义:

\[\begin{aligned} f(S)&=\bigcap_{i\in S} A_i\\ g(S)&=\left(\bigcap_{i\in S}A_i\right)\bigcap \left(\bigcap_{i\notin S} \overline{A_i}\right) \end{aligned}\]

上划线表示补集。表述一下就是 \(f(S)\) 表示 \(S\) 集合内集合必选的方案,并不特殊地,\(f(\varnothing)=U\)\(g(S)\) 表示 \(S\) 集合内集合必选,\(S\) 集合外必不选的方案,可以想象 Venn 图上的最小图形。有

\[f(S)=\sum_{T\subseteq S} g(T) \]

这个就是讨论 \(S\) 集合外每个集合选还是不选。非要理论证明的话也可以讨论每个元素出现次数吧。

于是可以进行子集反演得到

\[\begin{aligned} g(0)&=\sum_{S} (-1)^{|S|} f(S)\\ \left(\bigcap_{i=1}^n \overline{A_i}\right)&=\sum_{S\not=\varnothing}(-1)^{|S|} f(S)+U\\ \left(\bigcap_{i=1}^n \overline{A_i}\right)&=U-\sum_{S\not=\varnothing}(-1)^{|S|-1}f(S)\\ \sum_{S\not=\varnothing}(-1)^{|S|-1}f(S)&=U-\left(\bigcap_{i=1}^n \overline{A_i}\right)\\ \sum_{S\not=\varnothing}(-1)^{|S|-1}\left(\bigcap_{i\in S} A_i\right)&=\bigcup_{i} A_i \end{aligned}\]

然后就得到了容斥原理。所以说子集容斥是容斥原理的扩展形式确实不为过。但是话又说回来,任何两个正确的定理都是能互相为前提证明的,所以看个乐呵就好。

此举意义也许在于,强迫症选手考试时万一用不同定理验算式子时得到不同结果该如何处理(?

posted @ 2025-07-23 13:24  cinccout  阅读(112)  评论(0)    收藏  举报