容斥原理的组合证明
背景
我们如何计算两个集合的并集的基数?设 A1 和 A2 为两个同一个有限集 A 的子集。如果两者是相离的,那么直接有 ∣A1∪A2∣=∣A1∣+∣A2∣ 。如果两者相交,仍采用上方的公式计算,两个集合的共有元素就会被计算两次,需要减去 ∣A1∩A2∣ 来保证共有元素只被计算了一次:
∣A1∪A2∣=∣A1∣+∣A2∣−∣A1∩A2∣
容斥原理
将背景中的想法推广到任意数量的子集上,就得到了容斥原理:
∣A1∪⋯∪An∣=k=1∑n(−1)k−1S⊆{1,…n}:∣S∣=k∑∣∩i∈SAi∣
注:公式中内层求和是对于 {1,…n} 的所有大小为 k 的子集进行的,因此公式可以转写为:
∣A1∪⋯∪An∣=i=1∑n∣Ai∣−i<j∑∣Ai∩Aj∣+i<j<k∑∣Ai∩Aj∩Ak∣−i<j<k<l∑∣Ai∩Aj∩Ak∩Al∣+⋯+(−1)n−1∣A1∩⋯∩An∣
其中 ∑i<j 表示对于所有的 i,j∈1,…,n 且 i<j 的情况求和,以此类推。
证明思路
欲证明容斥原理,应该验证对 ∀a∈A1∪⋯∪An 在公式右侧只被计数了 1 次。
证明
取点小a
从 A1∪⋯∪An 中任意取 一个 固定的/特定的点小a
定义小a所在的下标集M
M⊆{1,…,n}M={i∈{1,…,n}∣a∈Ai}
M 即为 a 所属的 Ai (A的子集们) 的下标合集。
也就是:
a∈Ai⇔i∈M
而且由于 a∈A1∪⋯∪An ,必然 ∃Ai∋a ,所以 M 的基数 ∣M∣≥1。
S的定义回顾
S⊆{1,…n}:∣S∣=k
S 是公式中的下标集。
S与M的关系的分类讨论
-
若 S⊆M, 则 a∈∩i∈SAi ,此时 ∣∩i∈SAi∣=1
也就是说:若 给定的下标集S 是 a所在的下标集M 的子集,则 a 存在于 给定的下标集S 所指定的子集们的交集∩i∈SAi 中。因为我们只取了 1 个点,所以此时基数 ∣∩i∈SAi∣=1 ,因为 a 在这个大交集中。
-
与此相对的是,
若 S⊈M, 则 a∈/∩i∈SAi ,此时 ∣∩i∈SAi∣=0
也就是说:若 给定的下标集S 不是 a所在的下标集M 的子集,则 a 不存在于 给定的下标集S 所指定的子集们的交集∩i∈SAi 中。因为我们只取了 1 个点,所以此时基数 ∣∩i∈SAi∣=0 ,因为 a 不在这个大交集中。
公式右侧对a的计数
回忆加减法计算:
0+num=numnum−0=num1+num=num+1num−1=num−1
通过S与M的关系的分类讨论,我们知道,每当 S⊆M 都有 ∣∩i∈SAi∣=1,每当 S⊈M 都有 ∣∩i∈SAi∣=0。
因此在一个点的情况下,公式右侧可以被表示为 (∣∩i∈SAi∣=0 的情况不用累加):
k=1∑m(−1)k−1S⊆M:∣S∣=k∑1
由于集合 M 的 k 个元素的子集数量等于从 m 个元素中选出 k 个的组合数量 (km),上式可以被表示为:
k=1∑m(−1)k−1(km)
又根据二项式定理的推论 (二项式定理 a=−1 b=1 时的特殊情况) ,上式可以被表示为:
k=1∑m(−1)k−1(km)=1
回顾证明思路会发现我们已经
证明完毕。
附
二项式定理 Binomial Theorem
(a+b)n=k=0∑n(kn)akbn−k
注:二项式定理也可以使用组合证明,思路是对单项式的系数计数
推论 Corollary
k=0∑n(−1)k(kn)=0
容斥原理的两种常用证明方法
-
数学归纳法
-
指示函数法
-
定义集合A的指示函数:
1A(x)={1, x∈A0, x∈/A
-
和组合证明是等价的,是组合证明的严格化
参考