2025-10-22 数学 离散数学 组合学 832 2 分钟

容斥原理的组合证明

背景

我们如何计算两个集合的并集的基数?设 A1A_1A2A_2 为两个同一个有限集 AA 的子集。如果两者是相离的,那么直接有 A1A2=A1+A2|A_1 \cup A_2|=|A_1|+|A_2| 。如果两者相交,仍采用上方的公式计算,两个集合的共有元素就会被计算两次,需要减去 A1A2|A_1 \cap A_2| 来保证共有元素只被计算了一次:

A1A2=A1+A2A1A2|A_1 \cup A_2|=|A_1|+|A_2|-|A_1 \cap A_2|

容斥原理

背景中的想法推广到任意数量的子集上,就得到了容斥原理:

A1An=k=1n(1)k1S{1,n}:S=kiSAi|A_1 \cup \cdots \cup A_n| = \sum_{k=1}^{n} (-1)^{k-1} \sum_{S \subseteq \{1, \dots n\}:|S|=k} |\cap_{i\in S}A_i|

注:公式中内层求和是对于 {1,n}\{1, \dots n\} 的所有大小为 kk 的子集进行的,因此公式可以转写为:

A1An=i=1nAii<jAiAj+i<j<kAiAjAki<j<k<lAiAjAkAl++(1)n1A1An\begin{aligned} |A_1 \cup \cdots \cup A_n| = \sum_{i=1}^{n}|A_i| - \sum_{i<j}|A_i \cap A_j| + \sum_{i<j<k}|A_i \cap A_j \cap A_k| \\ - \sum_{i<j<k<l}|A_i \cap A_j \cap A_k \cap A_l| + \dots + (-1)^{n-1}|A_1 \cap \cdots \cap A_n| \end{aligned}

其中 i<j\sum_{i<j} 表示对于所有的 i,j1,,ni,j \in {1, \dots, n}i<ji<j 的情况求和,以此类推。

证明思路

欲证明容斥原理,应该验证对 aA1An\forall a \in A_1 \cup \cdots \cup A_n 在公式右侧只被计数了 11 次。

证明

取点小aa

A1AnA_1 \cup \cdots \cup A_n 中任意取 一个 固定的/特定的点小a

定义小aa所在的下标集MM

M{1,,n}M={i{1,,n}aAi}\begin{gathered} M \subseteq \{1, \dots ,n\} \\ M = \{i\in\{1,\dots ,n\} | a \in A_i\} \end{gathered}

MM 即为 aa 所属的 AiA_i (AA的子集们) 的下标合集。

也就是:

aAiiMa \in A_i \Leftrightarrow i \in M

而且由于 aA1Ana \in A_1 \cup \cdots \cup A_n ,必然 Aia\exists A_i \ni a ,所以 MM 的基数 M1|M|\ge 1

SS的定义回顾

S{1,n}:S=k{S \subseteq \{1, \dots n\}:|S|=k}

SS 是公式中的下标集。

SSMM的关系的分类讨论

  • SMS \subseteq M, 则 aiSAia \in \cap_{i\in S}A_i ,此时 iSAi=1|\cap_{i\in S}A_i| = 1

    也就是说:若 给定的下标集SSaa所在的下标集MM 的子集,则 aa 存在于 给定的下标集SS 所指定的子集们的交集iSAi\cap_{i\in S}A_i 中。因为我们只取了 11 个点,所以此时基数 iSAi=1|\cap_{i\in S}A_i| = 1 ,因为 aa 在这个大交集中。

  • 与此相对的是,

    SMS \nsubseteq M, 则 aiSAia \notin \cap_{i\in S}A_i ,此时 iSAi=0|\cap_{i\in S}A_i| = 0

    也就是说:若 给定的下标集SS 不是 aa所在的下标集MM 的子集,则 aa 不存在于 给定的下标集SS 所指定的子集们的交集iSAi\cap_{i\in S}A_i 中。因为我们只取了 11 个点,所以此时基数 iSAi=0|\cap_{i\in S}A_i| = 0 ,因为 aa 不在这个大交集中。

公式右侧对aa的计数

回忆加减法计算:

0+num=numnum0=num1+num=num+1num1=num1\begin{gathered} 0+num=num \\ num-0=num \\ 1+num=num+1 \\ num-1=num-1 \end{gathered}

通过SSMM的关系的分类讨论,我们知道,每当 SMS \subseteq M 都有 iSAi=1|\cap_{i\in S}A_i| = 1每当 SMS \nsubseteq M 都有 iSAi=0|\cap_{i\in S}A_i| = 0

因此在一个点的情况下,公式右侧可以被表示为 (iSAi=0|\cap_{i\in S}A_i| = 0 的情况不用累加):

k=1m(1)k1SM:S=k1\sum_{k=1}^m(-1)^{k-1} \sum_{S \subseteq M : |S|=k } 1

由于集合 MMkk 个元素的子集数量等于从 mm 个元素中选出 kk 个的组合数量 (mk)\binom{m}{k},上式可以被表示为:

k=1m(1)k1(mk)\sum_{k=1}^m(-1)^{k-1} \binom{m}{k}

又根据二项式定理推论 (二项式定理 a=1a=-1 b=1b=1 时的特殊情况) ,上式可以被表示为:

k=1m(1)k1(mk)=1\sum_{k=1}^m(-1)^{k-1} \binom{m}{k} = 1

回顾证明思路会发现我们已经

证明完毕。

二项式定理 Binomial Theorem

(a+b)n=k=0n(nk)akbnk(a+b)^n = \sum_{k=0}^{n} \binom{n}{k} a^k b^{n-k}

注:二项式定理也可以使用组合证明,思路是对单项式的系数计数

推论 Corollary

k=0n(1)k(nk)=0\sum_{k=0}^{n} (-1)^k \binom{n}{k} = 0

容斥原理的两种常用证明方法

  • 数学归纳法

  • 指示函数法

    • 定义集合A的指示函数:

      1A(x)={1, xA0, xA1_{A}(x)= \begin{cases} 1,\ x \in A \\ 0,\ x \notin A \end{cases}
    • 和组合证明是等价的,是组合证明的严格化

参考