Skip to content

容斥原理

2021-09-06

INFO

若无特殊说明,本章涉及的变量皆为正整数。

简介 ​

容斥原理是一种不重不漏的计数原理。

例,A,00B,00C 三人竞选扫黄队长:

  • 15 人投给 A;
  • 16 人投给 B;
  • 17 人投给 C;
  • 2 人同时投给 A,00B,00C;
  • 4 人同时投给 A,00B;
  • 5 人同时投给 A,00C;
  • 6 人同时投给 B,00C。

问共有多少人参与投票。

A,00B,00C 三人的得票情况以用韦恩图描述:

  • |A|=0015;
  • |B|=0016;
  • |C|=0017;
  • |A∩B∩C|=002;
  • |A∩B|=004;
  • |A∩C|=005;
  • |B∩C|=006。

求的是投票人数,即 |A∪B∪C|。

|A∪B∪C|=|A|+|B|+|C|−|A∩B|−|A∩C|−|B∩C|+|A∩B∩C|

将上述问题推广到普遍情况,就是容斥原理。

公式 ​

并集 ​

对于 n 个集合 S1,00S2⋯Sn,|S| 表示集合 S 的元素数,则:

|⋃i=1nSi|=∑i|Si|−∑i<j|Si∩Sj|+∑i<j<k|Si∩Sj∩Sk|−⋯+(−1)n+1|⋂i=1nSi|
证

设 x∈Sa1,00Sa2,00⋯,00Sam,根据公式,|⋃i=1nSi| 中包含元素 x 的个数为:

cnt(x)=m−(m2)+(m3)−⋯+(−1)n+1(mm)=(m0)−∑i=0m(−1)i(mi)

根据 二项式定理 有:

(1−1)m=∑i=0m(mi)1m−i⋅(−1i)=∑i=0m(−1)i(mi)∴cnt(x)=(m0)−(1−1)m=1

每个元素只出现一次,等价于并集,证毕。

交集 ​

对于 n 个集合 S1,00S2⋯Sn,已知全集为 U:

|⋂i=1nSi|=|U|−|⋃i=1nSi―|

其中 |⋃i=1nSi―| 套用 并集 的公式计算即可。

多重集的排列数 ​

  • 普通集合:不允许有相同的元素;
  • 多重集:相同的元素可以出现多次。

设 S=00{n1⋅a1,n2⋅a2,⋯,nk⋅ak} 是由 n1 个 a1,n2 个 a2,⋯,nk 个 ak 组成的多重集。

设 n=00∑i=1kni。

S 的全排列个数为:

n!n1!n2!⋯nk!
证明

n 个不同元素的全排列有 n! 种。

若有 j 个元素相同,则 n! 种排列中有 j! 种排列应算作同一种。排列数为:

nj!

根据 乘法原理,多重集的全排列个数为:

n!n1!n2!⋯nk!

多重集的组合数 1 ​

设 S=00{∞⋅a1,∞⋅a2,⋯,∞⋅ak},从 S 中任取 λ 个元素的方案数为:

(k+λ−1k−1)
证明

原问题等价于求以下方程非负整数解的个数:

x1+x2+⋯+xk=λ

解的个数用插板法计算:

在 λ 个 1 之间插 k−001 块板,使其分为 k 个区间。第 i 个区间的和代表 xi。这样就构造出了一组解。

需要注意,板插在两端或同一个空隙中是允许的。

最初有 λ+001 个空隙。插第一块板有 λ+001 种方法,第二块有 λ+002 种,第三块有 λ+003 种 ⋯ 第 k−001 块有 λ+00k−001 种。根据 乘法原理,总的方案数为:

(λ+1)(λ+2)(λ+3)⋯(λ+k−1)=Aλ+k−1k−1

但是插板的顺序与答案无关。这么算显然会包含一些重复情况:

每一个方案都有 (k−001)! 种不同的插板顺序,故答案为:

Aλ+k−1k−1(k−1)!=(k+λ−1k−1)

多重集的组合数 2 ​

设 S=00{n1⋅a1,n2⋅a2,⋯,nk⋅ak},从 S 中任取 λ(λ≤∑ini) 个元素的方案数为:

(k+λ−1k−1)−∑i(k+λ−ni−2k−1)+∑i<j(k+λ−ni−nj−3k−1)−⋯+(−1)k(k+λ−∑ini−k−1k−1)
证明

考虑容斥原理:合法方案数 = 总方案数 − 不合法方案数。

总方案数 =(k+λ−1k−1),详见 多重集的组合数 1。

于是问题转化为求不合法方案数。

  • 设 Ti 为 ai 超标的多重集。先取 ni+001 个 ai,再任取 λ−00ni−001 个元素,加入 Ti。不同 Ti 的数量为 (k+λ−ni−2k−1);
  • 设 Tij 为 ai,00aj 超标的多重集。先取 ni+001 个 ai 和 nj+001 个 aj,再任取 λ−00ni−00nj−002 个元素,加入 Tij。不同 Tij 的数量为 (k+λ−ni−nj−3k−1);
  • ...

依次类推,由容斥原理可得,不合法的方案数为:

|⋃{T}|=∑i(k+λ−ni−2k−1)−∑i<j(k+λ−ni−nj−3k−1)+⋯+(−1)k+1(k+λ−∑ini−k−1k−1)

于是合法的方案数为:

(k+λ−1k−1)−|⋃{T}|