抽屉原理

定义

抽屉原理,亦称鸽巢原理(the pigeonhole principle).

它常被用于证明存在性证明和求最坏情况下的解.

简单情况

将 n+1n+1 个物体,划分为 nn 组,那么有至少一组有两个(或以上)的物体.

这个定理看起来比较显然,证明方法考虑反证法:假如每个分组有至多 11 个物体,那么最多有 1×n1\times n 个物体,而实际上有 n+1n+1 个物体,矛盾.

推广

将 nn 个物体,划分为 kk 组,那么至少存在一个分组,含有大于或等于 ⌈nk⌉\left \lceil \dfrac{n}{k} \right \rceil 个物品.

推广的形式也可以使用反证法证明:若每个分组含有小于 ⌈nk⌉\left \lceil \dfrac{n}{k} \right \rceil 个物体,则其总和 S≤(⌈nk⌉−1)×k=k⌈nk⌉−k<k(nk+1)−k=nS\leq (\left \lceil \dfrac{n}{k} \right \rceil -1 ) \times k=k\left\lceil \dfrac{n}{k} \right\rceil-k < k(\dfrac{n}{k}+1)-k=n 矛盾.

此外,划分还可以弱化为覆盖结论不变.
给定集合 SS, 一个 SS 的非空子集构成的簇 {A1,A2…Ak}\{A_1,A_2\ldots A_k\}

  • 若满足 ⋃i=1kAi\bigcup_{i=1}^k A_i 则称为 SS 的一个覆盖(cover)
  • 若一个覆盖还满足 i≠j→Ai∩Aj=∅i\neq j\to A_i\cap A_j=\varnothing 则称为 SS 的一个划分.

鸽巢原理可以有如下叙述:对于 SS 的一个覆盖 {A1,A2…Ak}\{A_1,A_2\ldots A_k\} 有至少一个集合 AiA_i 满足 ∣Ai∣≥⌈∣S∣k⌉\left\vert A_i \right\vert \geq \left\lceil \dfrac{\left\vert S \right\vert}{k} \right\rceil.

参考文献

本文内容来自 OI Wiki《抽屉原理》;作者与修订历史见原文。AIOJ 对排版、站内链接和资源路径做了格式适配。

内容依 CC BY-SA 4.0 与 SATA 许可共享;附加条款以原文声明为准。感谢 OI Wiki 作者与贡献者;请按 SATA 约定前往 OI Wiki 仓库 Star 支持。