Skip to content

原则Principle

鸽巢原理

施工中 · 内容逐步修订

Pigeonhole principle · Dirichlet's box principle

把多于 n 个对象放入 n 个容器时,至少一个容器包含两个对象。

形式陈述 ​

设 A,B 为有限集,|A|,|B| 表示其基数。若

|A|>|B|,

则不存在从 A 到 B 的单射。把函数 f:A→B 看成“把每个对象放入一个容器”,结论等价于:至少存在不同的 a1,a2∈A,使

f(a1)=f(a2).

更一般地,设整数 N≥0、k≥1。把 N 个对象分到 k 个容器中,至少有一个容器包含

⌈Nk⌉

个对象,其中 ⌈t⌉ 表示不小于 t 的最小整数。否则每个容器至多容纳 ⌈N/k⌉−1 个,总容量会小于 N,与对象总数矛盾。

直觉

鸽巢原理并不依赖对象是什么,只比较分类前后的容量。证明问题时,真正有创造性的部分通常不是最后一句“所以发生碰撞”,而是选择一个合适的分类函数:哪些对象当作鸽子,哪些不变量当作巢,以及每个巢最多能容纳多少对象。

它给出的是存在性。若对象多于可区分状态,就必有两个对象落入同一状态;但原理本身不会指出是哪两个,也不会给出高效寻找方法。算法若需要实际找到碰撞,还必须利用对象的表示、排序或搜索结构。

强化形式可以理解为平均数的离散版本。平均占用量是 N/k,因此最大占用量不可能低于其上取整。这个结论比“至少两个同巢”更适合极值问题,因为它直接给出某类中必须聚集多少对象。

例子与边界

设 n≥1,把 n+1 个整数按模 n 的余数分类。余数只有 0,1,…,n−1 共 n 种,所以必有两个整数同余;它们的差可被 n 整除。这里选择余数作为巢,把一个数论整除结论转成有限分类碰撞。

在有 n≥2 个顶点的无向简单图中,所有顶点的度数落在 0,1,…,n−1 之间,但度数 0 与 n−1 不可能同时出现:若有一个顶点连接所有其他顶点,就不存在孤立点。因此实际可出现的度数至多 n−1 种,n 个顶点中必有两个度数相同。这个例子显示,“巢数”有时来自额外结构,而不是表面上的取值范围。

边界必须精确。n 个对象放入 n 个容器并不强迫碰撞,因为双射可以让每个容器恰好一个对象。即使对象更多,鸽巢原理也只保证至少一个拥挤容器,不自动给出拥挤容器的数量、碰撞对数或分布形状。

无限集合中不能只比较“看起来更多”。自然数与偶数之间存在双射,所以把无限多个对象放进无限多个容器时,有限版容量直觉可能失效。此时必须使用基数、测度或密度等更精细工具。

推论与应用

给定任意 n≥1 个整数 a1,…,an,令 s0=0、sj=a1+⋯+aj。这 n+1 个前缀和只有 n 种模 n 的余数,故有 i<j 满足 si≡sj(modn)。相减得到

ai+1+⋯+aj=sj−si≡0(modn).

因此必有一段非空连续子序列之和被 n 整除。加入空前缀 s0 很关键:它既补足了鸽子的数量,也使“从第一项开始的片段”包含在差分表示中。例如 n=4、序列 2,3,1,5 的前缀和为 0,2,5,6,11,其中 s1=2 与 s3=6 同余,找出的片段就是 3+1=4。

同样的做法还可把几何点按网格单元分类,以小单元限制两点距离;把输入前缀按自动机状态分类,则可找出进入同一状态的不同前缀。每次都需要说明“同巢”怎样转回题目要求的结论。

在计算机科学中,有限哈希空间接收更多键时必然发生哈希冲突;有限状态机运行足够久后必然重复状态;固定长度摘要无法为无限消息提供无碰撞编码。这些都是同一容量事实,但实际安全性或算法性能还取决于碰撞是否容易构造、分布是否均匀以及系统如何处理冲突。

参考资料
  • Mitchel T. Keller and William T. Trotter, Applied Combinatorics, 在线版,2026 年访问,§4.1 The Pigeon Hole Principle,容量论证与分类函数的选择。
  • Kenneth H. Rosen, Discrete Mathematics and Its Applications, 8th ed., McGraw-Hill, 2019, Section 6.2.
  • Miklós Bóna, A Walk Through Combinatorics, 4th ed., World Scientific, 2016, Chapter 2.
  • László Lovász, József Pelikán, and Katalin Vesztergombi, Discrete Mathematics, Springer, 2003, counting principles.
关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系