Lec 17 容斥、鸽巢与组合恒等式
资料依据:课程视频与 transcript · Lecture notes
TL;DR
- 容斥原理以交替加减的方式修正多个集合交集的重复计数,可用于计算并集、补集和互素元素个数。
- 鸽巢原理把“对象数多于容器数”转化为必有碰撞的存在性结论;加强形式可给出至少某个容器的下界。
- 双重计数通过两种方式计数同一集合证明组合恒等式,二项式定理和 Pascal 恒等式都可获得直接的组合解释。
1. 容斥原理(Inclusion-Exclusion,PIE)
问题起点: 加法法则要求集合两两不相交。若集合有交叉,该如何计算并集的大小?
两个集合:
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
三个集合:
∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
一般形式(n 个集合):
∣⋃i=1nAi∣=∑i∣Ai∣−∑i<j∣Ai∩Aj∣+∑i<j<k∣Ai∩Aj∩Ak∣−⋯±∣A1∩⋯∩An∣
规律:加单集合,减两两交,加三重交,……交替进行直到 n 重交。
定理(PIE 的等价形式)
设 U=⋃i∈[n]Ai,则
∑I⊆[n](−1)∣I∣⋂i∈IAi=0
其中约定 ⋂∅=U。
证明: 对任意 x∈U,设 Ix=i:x∈Ai(非空)。x 对左侧的贡献为 ∑I⊆Ix(−1)∣I∣。取 Ix 中任意一个元素 i,对偶映射 I↔I△i 在偶数大小子集和奇数大小子集之间建立双射,故贡献之和为 0。
应用:与 n=pqr 互质的数的个数
设 n=pqr(三个不同素数之积),求 1,2,…,n 中与 n 互质的数的个数。
设 Ap,Aq,Ar 分别为 1,…,n 中 p,q,r 的倍数的集合。
由容斥原理:
∣Ap∪Aq∪Ar∣=pn+qn+rn−pqn−prn−qrn+pqrn
化简后,互质的数的个数为:
n−∣Ap∪Aq∪Ar∣=(p−1)(q−1)(r−1)
2. 鸽巢原理(Pigeonhole Principle)
定理: 若 ∣A∣>∣B∣,则任意全函数 f:A→B 均不是单射——即存在 a1=a2∈A 使得 f(a1)=f(a2)。
形象地说:鸽子(A)比鸽巢(B)多,则必有某个鸽巢里住了至少两只鸽子。
特点:非构造性。 只能证明碰撞存在,无法直接找出具体的碰撞对象。
例: 房间里超过 26 人,则必有两人姓名首字母相同。
例(配对袜子): n 种颜色的袜子各一双,至少取多少只才保证凑成一双?答案恰好是 n+1(n 只不能保证,n+1 只由鸽巢原理保证)。
例(波士顿居民): 波士顿约 65 万人,头发数量至多约 20 万根。人数 > 可能的发量种数,故必有两位非秃头的波士顿居民发量完全相同。
例(无损压缩的不可能性): 长度为 n 的二进制串共 2n 个,而长度更短的串只有 2n−1 个。任何全函数从较大集合到较小集合都有碰撞,故不存在对所有 n 位串都严格缩短的无损压缩方案。
广义鸽巢原理: 若 ∣A∣>k⋅∣B∣,则任意从 A 到 B 的全函数必有某个元素 b∈B 被至少 k+1 个元素映射到。
棋盘例题: 在 8×8 棋盘的 64 格中放置 33 个车,证明可以找到 5 个互不攻击的车(即位于 5 个不同行和 5 个不同列)。
构造: 将棋盘 64 个格子用数字 1~8 标记(见课件中的"斜条纹"分组,每组恰好 8 个格子,每行每列各含一个)。将 33 个车的标记视为鸽子,8 个标记值视为鸽巢。由广义鸽巢原理(33>4×8),必有某个标记值对应至少 5 个车;这 5 个车的标记相同,意味着它们位于 5 个不同行、5 个不同列,互不攻击。
3. 组合恒等式与双重计数
核心思路: 对同一个集合用两种不同方式计数,令结果相等,得到恒等式。
恒等式一
∑k=0n(kn)=2n
证明: 设 S 为 1,…,n 的所有子集构成的集合。
- 一方面,∣S∣=2n(每个元素独立选入或不选入)。
- 另一方面,按子集大小分类,大小为 k 的子集有 (kn) 个,由加法法则 ∣S∣=∑k=0n(kn)。 两式相等即得。
二项式定理(Binomial Theorem)
(x+y)n=∑k=0n(kn)xkyn−k
证明: 展开 (x+y)n 得 2n 个形如 a1a2⋯an(每个 ai 为 x 或 y)的项。xkyn−k 项的系数 = 从 n 个位置中选 k 个位置填 x 的方案数 =(kn)。
多项式定理(Multinomial Theorem)
(∑i=1mxi)n=∑k1+⋯+km=n(k1,k2,…,kmn)∏i=1mxiki
其中多项式系数为:
(k1,k2,…,kmn)=k1!,k2!,⋯,km!n!
Pascal 恒等式
(kn)=(k−1n−1)+(kn−1)
组合证明: 设 S 为 1,…,n 的所有大小为 k 的子集。
- 包含 n 的子集:还需从 1,…,n−1 中选 k−1 个,共 (k−1n−1) 种。
- 不包含 n 的子集:从 1,…,n−1 中选 k 个,共 (kn−1) 种。 两类不相交且覆盖所有子集,由加法法则得证。
该恒等式说明帕斯卡三角(Pascal's Triangle)中每个数等于其正上方两数之和。帕斯卡三角第 n 行之和为 2n,各对角线之和给出斐波那契数列。
附录:常用求和/求积记号
∑i=1nxi=x1+x2+⋯+xn,∏i=1nxi=x1×x2×⋯×xn
⋃i=1nSi=S1∪⋯∪Sn,⋂i=1nSi=S1∩⋯∩Sn
[n]:=1,2,…,n
边界约定:∑∅=0,∏∅=1,⋃∅=∅,⋂∅=U(全集)。
我的理解
我的理解
容斥与双重计数其实都在处理“一个对象被数了几次”。前者用交集层次逐步校正重复,后者主动构造两个重数恒等的视角。