视频加载失败

安吉D4:容斥原理

1117 字
6 分钟
安吉D4:容斥原理

容斥原理是组合数学中用于计数的一种基本方法,核心思想是:先不考虑重叠,把各种情况计数后,再减去重复计算的部分,加上被多减的部分,以此类推

两个集合的情况

设有两个集合 AABB,我们想求它们的并集大小 AB|A \cup B|

直接加 A+B|A| + |B| 会把中间重叠部分 AB|A \cap B| 算两次,所以需要减去一次:

AB=A+BAB|A \cup B| = |A| + |B| - |A \cap B|

三个集合的情况

ABC=A+B+CABBCAC+ABC|A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |B \cap C| - |A \cap C| + |A \cap B \cap C|

规律:奇加偶减.即:

  • 加 1 个集合的交集
  • 减 2 个集合的交集
  • 加 3 个集合的交集
  • ……

一般形式#

A1,A2,,AnA_1, A_2, \dots, A_n 是有限集合,则:

i=1nAi=k=1n(1)k11i1<<iknAi1Ai2Aik\left| \bigcup_{i=1}^n A_i \right| = \sum_{k=1}^n (-1)^{k-1} \sum_{1 \le i_1 < \dots < i_k \le n} |A_{i_1} \cap A_{i_2} \cap \dots \cap A_{i_k}|

使用补集:求“不满足任何性质”的元素个数#

正难则反,如果全集 UU 中有一些“坏性质” P1,P2,,PnP_1, P_2, \dots, P_n,设 AiA_i 为满足性质 PiP_i 的元素集合,则不满足任何性质的元素个数为:

A1A2An=Ui=1nAi|\overline{A_1} \cap \overline{A_2} \cap \dots \cap \overline{A_n}| = |U| - \left| \bigcup_{i=1}^n A_i \right|

对于各个性质地位相等#

如果已知“各个性质彼此地位相等”,即对于选择一些性质后的交集大小只与性质的条数 kk 有关,与这些性质具体是什么无关.我们就说这个问题是对称的.换句话说,交集的大小和性质的条数呈函数关系,不妨记交集的大小为 a(k)a(k),故 a(k)a(k)kk 确定时为一定值,即

a(k)=Ai1Ai2Aik(i1<<ik)a(k)=|A_{i_1}\cap A_{i_2}\cap\cdots\cap A_{i_k}| \quad (\forall i_1<\dots<i_k)

则至少满足一个性质的元素个数:

i=1nAi=k=1n(1)k11i1<<ikna(k)\Bigl|\bigcup_{i=1}^n A_i\Bigr| = \sum_{k=1}^n (-1)^{k-1} \sum_{1\le i_1<\dots<i_k\le n} a(k)

内层对每个 kk 都要枚举 (nk)\binom{n}{k} 个交集,总共 2n2^n 项.

由于内层的每个性质条数为 kk 的交集都等于 a(k)a(k),而性质条数为 kk 的子集共有 (nk)\binom{n}{k} 个(一共 nn 条性质),因此

1i1<<iknAi1Aik=(nk)a(k)\sum_{1\le i_1<\dots<i_k\le n} |A_{i_1}\cap\cdots\cap A_{i_k}| = \binom{n}{k} a(k)

代入上式得

i=1nAi=k=1n(1)k1(nk)a(k)\boxed{\Bigl|\bigcup_{i=1}^n A_i\Bigr| = \sum_{k=1}^n (-1)^{k-1} \binom{n}{k} a(k)}

项数立刻由 2n2^n 降为 nn(实际对 kk11nn 求和).这就是容斥原理的多项式形式

依此,有补集形式:不满足任何性质的元素个数:

A1An=Ui=1nAi=k=0n(1)k(nk)a(k)|\overline{A_1}\cap\cdots\cap\overline{A_n}| = |U| - \Bigl|\bigcup_{i=1}^n A_i\Bigr| = \sum_{k=0}^n (-1)^k \binom{n}{k} a(k)

其中规定 a(0)=Ua(0)=|U|(选取 00 个性质即全集).

经典例子:错位排列#

1,2,,n1,2,\cdots ,n 的排列 aa 中满足 aiia_i \neq i 的排列数.

正难则反,可以定义性质 PiP_i:第 ii 位是 ii.显然对称.

  • a(k)a(k):固定某 kk 个位置不动,其余 nkn-k 个位置任意排列,故 a(k)=(nk)!a(k)=(n-k)!
  • U=n!|U|=n!

错位排列数:

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

化简即为 Dn=n!k=0n(1)kk!D_n = n! \sum_{k=0}^n \frac{(-1)^k}{k!},复杂度 O(n)O(n)

二项式反演#

定义#

设我们有一个包含 nn 个性质的集合.

  • fkf_k恰好满足 kk 个性质的元素个数.
  • gkg_k钦定必须满足某 kk 个特定性质的元素个数,但不关心其他性质是否满足.更准确地说,我们选定 kk 个性质,强制要求元素满足这 kk 个性质,而其余 nkn-k 个性质可以满足也可以不满足.从 nn 个性质中选择 kk 个来钦定有 (nk)\binom{n}{k} 种选择方案,因此我们定义 gkg_k 为所有 (nk)\binom{n}{k} 种选法的总和,即
gk=1i1<<ikn{x:x 满足性质 Pi1,,Pik}g_k = \sum_{1\le i_1<\dots<i_k\le n} \bigl|\{x : x \text{ 满足性质 } P_{i_1},\dots,P_{i_k}\}\bigr|

如果问题是对称的, gkg_k 就等于 (nk)×a(k)\binom{n}{k} \times a(k)

关系推导#

任何一个恰好满足 ii 个性质的元素,在计算 gkg_k 时,会被重复计数.具体来说,若一个元素 xx 恰好满足 ii 个性质(iki \ge k),那么从这 ii 个性质中选出 kk 个来“钦定”的方式有 (ik)\binom{i}{k} 种.即 xx 会出现在 (ik)\binom{i}{k} 个钦定子集之中,它对每一个子集的贡献都为 1,因此它对 gkg_k 的贡献是 (ik)\binom{i}{k}

于是有:

gk=i=kn(ik)fig_k = \sum_{i=k}^n \binom{i}{k} f_i

反演公式#

已知 gkg_k,想要求出 fkf_k,就需要反演上面的关系.二项式反演告诉我们:

fk=i=kn(1)ik(ik)gi\boxed{f_k = \sum_{i=k}^n (-1)^{i-k} \binom{i}{k} g_i}

常见应用#

  1. 错位排列:
    • f0f_0 = 没有不动点的排列数(错排数 DnD_n
    • a(k)a(k) = 固定 kk 个位置不动,其余任意排列的方法数 = (nk)!(n-k)!
    • gk=(nk)(nk)!g_k = \binom{n}{k}(n-k)!,用反演求出 f0f_0
  2. 组合计数:求恰好有 kk 个指定特征的方案数.

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

安吉D4:容斥原理
https://blog.jerrylab.top/posts/problem/anji2026/D4/about/
作者
Jerry
发布于
2026-08-04
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Jerry
Hello, I'm Jerry.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
80
分类
3
标签
35
总字数
89,198
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0