☰
鸽巢原理(抽屉原理):从数学证明到算法竞赛的实战指南
2026/10/1 12:05:21 网站建设 项目流程

先讲一个我常用来暖场的数学小测试:随便找13个人,我敢保证其中至少有两个人出生在同一个月份。你听到这句话的第一反应可能是"大概率吧",但我要说的是,这件事不是概率高,而是逻辑上100%确定。背后的道理,就是今天要聊的主角——鸽巢原理,也叫抽屉原理。它朴素到一句话就能说完:把n+1只鸽子放进n个鸽巢,总有一个巢里至少有两只鸽子。听起来像废话,却是组合数学中最锋利的一把刀,是无数竞赛题和算法题的底层逻辑。

这篇内容适合所有想搞懂鸽巢原理的读者,不管你是刚开始接触竞赛的中学生,还是工作多年想补补数学基础的程序员,甚至只是想陪孩子做趣味数学的家长,都能从这里找到用得上的东西。我会从原理本身讲起,一路拆到经典应用、竞赛实战、进阶形式,最后聊一聊我自己踩过的误区和总结出的破题习惯。整个读下来,你会发现这个"废话级别"的定理,其实是一座巨大的冰山。

1. 鸽巢原理的直觉与本质——为什么“简单到不像定理”

我第一次接触鸽巢原理时,心里只有四个字:这不废话吗?但恰恰是这种"废话"级别的命题,在数学里有着极其严密的逻辑地位。它不是一个经验总结,而是一条可以严格证明的定理。搞懂它为什么成立,你才算真正握住了这把刀。

1.1 从生活常识到一个严格的数学命题

给完全没接触过的人讲鸽巢原理,我一般用这句话:如果m个物体要放进n个抽屉,并且m > n,那么至少有一个抽屉里要放不少于两个物体。

举个最直白的例子:一年有12个月,现在来了13个人,每个人都有一个出生月份。一个月最多"装下"多少个人?每个人出生月份只有12种可能,那第13个人无论出生在哪个月,都会和前面某个人重复。这就是"13个人必有两人同月出生"的由来。

同样道理,367个人里必有两个人同一天生日——因为一年最多366天(算上闰年的2月29日)。这是"保证发生",而不是"大概率发生"。很多人会混淆这两个概念,后面我会专门展开讲。

你可能会说,这道理不是显而易见的吗?没错,它是显而易见的。但数学里有一条不成文的规矩:越是显而易见的命题,一旦被严格化、推广化,就越能爆发出可怕的力量。鸽巢原理就是典型代表。它表面说的是"鸽子比巢多就会挤",本质却是关于"有限集合到有限集合的映射必然产生碰撞"的深刻结论。

1.2 反证法:鸽巢原理为什么一定成立

要证明鸽巢原理,最漂亮的方式是反证法。

假设结论不成立,也就是说,每个巢里最多只有1只鸽子。那么n个巢最多能装下1 + 1 + ... + 1 = n只鸽子。可是我们手上有n+1只鸽子,n < n+1,矛盾。所以假设错误,必然存在某个巢里至少有2只鸽子。

你看,整个过程干净利落。很多人问我,为什么数学里总爱用反证法?因为对于"证明一定存在"这类命题,直接找往往无从下手,但假设它不存在,再推出矛盾,往往简单得多。鸽巢原理就是一个绝佳的入门例子:你不需要知道具体是哪只鸽子挤在哪只巢里,只要知道"必然存在",就够了。

从逻辑上说,鸽巢原理本质依赖于自然数的性質:如果有n个抽屉,每个抽屉容量上限是k−1(比如最多放k−1只),那么所有抽屉加起来最多只能装n(k−1)个物体。只要你手上的物体总数比这个上限多,就必然有抽屉"被迫"达到k个。这个推广形式就是鸽巢原理的广义版本,也是很多题目真正的考点。

1.3 平均数的视角:广义表述与向上取整

鸽巢原理还有一个更常用的表述,我习惯叫它平均值视角:

把m个物体放进n个抽屉,那么至少有一个抽屉里至少有⌈m/n⌉个物体。

这里的⌈m/n⌉是向上取整,也就是不小于m/n的最小整数。比如11个苹果放进4个抽屉,11/4 = 2.75,向上取整是3,所以至少有一个抽屉里至少有3个苹果。

为什么必须是向上取整?因为如果每个抽屉都少于⌈m/n⌉个,也就是每个抽屉最多⌈m/n⌉−1个,那么总数最多是n(⌈m/n⌉−1)。你可以算一下,这个数一定小于m,于是矛盾。

这个视角特别有用,因为它把"至少存在一个"变成了一个可以计算的量。比如你参加一个测试,总共答了50道题,分5个板块,平均每个板块10道题,那么显然至少有一个板块有10道题——这几乎是废话,但同样的逻辑用于更复杂的对象时就不废话了。后面我会展示,很多看似高不可攀的数学题,其实就是用这个平均值视角直接压出来的。

2. 从人群到棋盘:鸽巢原理的经典应用现场

原理看完了,接下来进入正题:它怎么用?我挑几个最经典的场景,它们分别代表了"用天然分类做抽屉""用颜色做抽屉""用余数做抽屉"这三种最常见的构造思路。

2.1 生日同月:13个人与12个抽屉

第一个例子已经说过:13个人必有两人同月出生。这里的物体是人,抽屉是月份。用平均值视角来说,⌈13/12⌉ = 2,所以至少两人生日在同一个月。

接着往深走一步。如果题目改成"40个人的班级里,一定有两个人同一天生日吗?"很多人的第一反应是"应该有吧",但正确答案是:不一定。因为40 < 366,从鸽巢原理的角度,物体数小于抽屉数,原理根本不适用。当然现实中一个40人班级里两人生日相同的概率很高,这属于概率论的生日悖论范畴,而不是确定性结论。

这个差别极其关键。鸽巢原理给的是最坏情况下的保证,它不负责回答"有多大可能性"。我在给学生讲的时候,一定会强调这一点:原理保证不了的事,你再觉得"理所当然"也不能用。否则做题时很容易把一个概率直觉当成必然结论,最后推导出错误答案。

还有一个反直觉的例子常被拿来当面试题:地球上至少有两个人头发根数相同。推理方式:假设一个人最多有15万根头发,把头发根数分成0到15万共150001类,而全球有几十亿人,远远大于150001。所以根据鸽巢原理,至少有两人的头发根数完全相同。这个结论听起来离谱,但逻辑上无懈可击。它展示的正是"用天然类别做抽屉"的力量。

2.2 棋盘骨牌:颜色也能当抽屉

第二个经典场景来自一道流传很广的趣味题:

一个8×8的国际象棋棋盘有64个格子,黑白各32个。如果去掉左上角和右下角这两个格子,剩下62格,能否用31块1×2的多米诺骨牌正好铺满?

直觉上,62格用31块骨牌,每块盖两个格子,似乎能铺满。但答案是不能。为什么?

每块多米诺骨牌不管怎么放,都会覆盖一个黑格和一个白格。所以如果31块骨牌真的能铺满62格,那就必须恰好覆盖31个黑格和31个白格。可是原来的棋盘黑白各32个,去掉的两个对角格是什么颜色?都是黑色。于是剩下的是30个黑格和32个白格,黑白数量不一致。无论你怎么摆,都不可能在黑白不等的情况下完成覆盖。

这个例子最妙的地方在于,它把"颜色"变成了抽屉,把"骨牌覆盖"变成了一场计数游戏。你根本不需要去尝试任何具体的摆放方案,仅仅靠鸽巢原理的思想,就永久性地否定了这个方案的存在性。

从这个例子可以提炼出一个重要经验:构造抽屉的依据不一定是"物理上的格子",任何能把物体分成互斥类别的标准,都可以当抽屉用。颜色、奇偶、正负、同余、配对方式,全是现成的抽屉素材。

2.3 整除问题:余数是最常用的抽屉之一

再来看一个在数论里反复出现的应用:

任取n+1个整数,必有其中两个数之差能被n整除。

证明同样直白:任何一个整数被n除,余数只能取0, 1, 2, ..., n−1,一共n种情况。现在有n+1个整数,把它们按余数分类,相当于把n+1个物体放进n个抽屉。鸽巢原理说,必有两个数落在同一个余数类里,也就是它们的余数相同。两个余数相同的数相减,自然能被n整除。

取一个具体的数字验证:任取6个整数,其中必有两个数之差是5的倍数。因为被5除的余数只有0到4五种,6个数却要分到5个抽屉里。

这个结论在算法竞赛里应用极广。比如判断一个数组中是否存在两个数的差是某个数的倍数,或者统计同余类的数量,底层都是这个思想。我甚至可以说,只要你见到"差"和"整除"两个词同时出现,第一反应就应该是余数抽屉。

2.4 抽屉从哪来:三种典型的构造思路

把上面这些经典例子放在一起,你会发现构造抽屉的思路并不是天马行空,而是有规律可循的。我总结成三种常见来源:

  1. 天然分类:月份、星期、生日、血型、头发根数——题目本身已经提供了分类标准,你只需要数一数物体数是否大于类别数。
  2. 人为划分:棋盘分色、正三角形分区域、区间等分——题目没有现成抽屉,需要你主动把对象划分成若干个互斥且覆盖全体的小区域。
  3. 数学结构:余数类、奇偶性、整除后的奇数部分——利用数本身的数学属性来制造抽屉,往往能解决最困难的一类题。

为了方便对照,我整理了一张经典例子表:

场景物体(鸽子)抽屉(鸽巢)结论
13人生日同月13个人12个月必有两人同月出生
367人生日同日367个人366天必有两人同一天生日
棋盘去对角骨牌覆盖需求黑格/白格黑白数不等,无法铺满
n+1个整数之差n+1个整数n个余数类必有两数之差被n整除

这三类源头几乎覆盖了90%的鸽巢原理题目。剩下10%的难题,往往是在"如何巧妙划分"上做文章,这也是下一部分要聊的竞赛实战。

3. 竞赛题里鸽子藏在哪里:抽屉构造的实战拆解

如果说前两部分是热身,这一部分就是真正的实战。竞赛题不会傻到告诉你"这里有n+1只鸽子、n个巢",它会把鸽子藏进数字、图形和关系里。破题的关键,就是你得把它们找出来。

3.1 1到2n中任取n+1个数:必有一个整除另一个

这道题我每次讲都觉得很惊艳。题目是这样:

从1到2n这2n个正整数中任意取出n+1个数,证明其中必有一个数整除另一个数。

看起来无从下手。1到2n里的数五花八门,整除关系更是一团乱麻。但实际上,这道题只需要一步巧妙的抽屉构造。

把每个正整数都写成"奇数 × 2的幂"的形式。什么意思?比如24 = 3 × 2³,8 = 1 × 2³,10 = 5 × 2¹,奇数部分分别是3、1、5。注意,任何一个正整数的奇数部分都是唯一的。

现在看从1到2n之间的数,它们的奇数部分只能取1, 3, 5, ..., 2n−1,一共只有n种。可我们选了n+1个数,于是根据鸽巢原理,必然有两个数的奇数部分相同。

假设这两个数是 a = r × 2^i 和 b = r × 2^j,其中r是同一个奇数,不妨设i < j。那么显然a整除b。

整个过程没有暴力计算,只是把一个看似复杂的"整除关系"转化成了"相同奇数部分"的碰撞。这一步转化,就是整个题目的灵魂。我当年第一次看到这个解法时,真的有一种被点亮的感觉——原来抽屉可以藏在数的"质因数分解剥掉2之后"这个层面。

这个题目也揭示了一个重要方法:大多数时候,你不需要直接构造两个有整除关系的数,你只需要构造一个让它们"共享某种结构"的抽屉,剩下的交给你选择的数学结构自己完成。

3.2 正三角形里的5个点:几何问题分区域

几何里也一样能藏鸽子。这道题是入门级的经典:

在一个边长为1的正三角形内任取5个点,证明至少有两个点之间的距离不超过1/2。

第一眼看上去像是度量几何的问题,好像和鸽巢原理没什么关系。但做法非常巧妙:把这个边长为1的正三角形,按照三条中位线切成4个边长都是1/2的小正三角形。

这样,原来的大三角形就被分成了4个互不重叠、覆盖全部的区域。现在放进去5个点,相当于5只鸽子飞进4个巢,必然有2个点落在同一个小正三角形里。

而每个小正三角形的直径(也就是内部任意两点能达到的最大距离)是它的边长1/2。因此,这两个落在同一个小三角形里的点,距离一定不超过1/2。

这个解法最值得学习的地方在于:抽屉不是天然存在的,而是你画出来的。当你感觉无从下手时,试着把图形均匀切割、把区间等分、把对象分组,往往就能硬生生地造出鸽巢来。几何极值问题里,这种"切割造抽屉"的手法极其常见,从三角形到正方形,从线段到圆周,到处都能用。

3.3 六人相识问题:从这里通向拉姆齐理论

第三个经典题,很多人在大学离散数学里见过它的影子:

任意6个人中,必有3个人两两认识,或者3个人两两不认识。

这题乍看像社交问题,实际上可以用图论建模:6个人看成6个点,任意两个人之间连一条线,认识染红色,不认识染蓝色。于是问题变成:任意给K6的每条边染红蓝两色,必存在一个同色三角形。

证明分两步走,第一步用鸽巢原理,第二步用排除法。

任取其中一个点A。从A出发连到其他5个点,一共5条边。这5条边只有红蓝两种颜色,根据鸽巢原理,至少3条边是同色的。不妨假设AB、AC、AD三条边都是红色。

现在看B、C、D这三个点之间的连线(一共三条)。如果其中任何一条是红色,比如BC是红的,那么A、B、C就构成了一个红色三角形。如果这三条边一条红的都没有,那它们就全是蓝色,B、C、D三个人就构成一个蓝色三角形。

两种可能,无论如何都会出现同色三角形。这个结论就是组合数学中拉姆齐理论的经典起点:R(3,3) = 6,意思是"要让同色三角形必然出现,至少需要6个点"。

这道题的精彩之处在于,它先用鸽巢原理从A点出发保证了"至少三条同色边",再通过排除法把剩下的情况一网打尽。鸽巢原理负责制造局部的不均匀,排除法负责把这些不均匀扩展到全局。这种组合拳,在竞赛题里非常常见。

3.4 复盘:发现鸽子和鸽巢的做题顺序

讲完三道题,我想把解题时的思考路径复盘一下,因为这才是真正能迁移到其他题目的东西。我一般按下面这个顺序走:

  • 第一,先盯住题目里的关键字眼。出现"任意""至少""保证"这样的词,鸽巢原理就该进入候选名单了。
  • 第二,判断物体数是否大于类别数。如果题目给出了明确的类别数,比如月份、颜色、余数、区间,那我先数一数物体数,看m是不是比n大。不大,就换角度。
  • 第三,尝试构造抽屉。没有现成抽屉时,优先考虑"等分""分组""按余数分类""按某种不变属性分类"。构造完以后,务必检查三点:每个物体都落在某个抽屉里吗?抽屉之间有重叠吗?抽屉数量是否确实小于物体数量?
  • 第四,计算目标。如果题目要求证明"至少有一个抽屉有k个物体",那就要验证⌈m/n⌉≥k。不满足,说明抽屉切得不合适,得重新划分。

这套流程不能保证解决所有难题,但至少能让你在看到一个陌生题目时不至于大脑空白。鸽巢原理最难的部分不是"使用"它,而是"识别"它,而这种识别能力只能靠经典例题的积累来喂出来。

4. 更强形式的鸽巢原理:平均值、加权与无限延伸

很多人以为鸽巢原理就是"n+1只鸽子塞进n个巢"这么一锤子买卖,其实它有三个明显的进阶方向,每一个都让威力上升一个量级。

4.1 广义形式:物体数远大于抽屉数时

最基础的推广是把"n+1个物体"改成"m个物体",结论变成:把m个物体放进n个抽屉,至少有一个抽屉里至少有⌈m/n⌉个物体。

这个我在第1.3节已经提过,但它的应用价值值得再说透一点。比如18个苹果放进4个抽屉,⌈18/4⌉ = 5,所以必然有个抽屉有5个苹果。换成更大的数也一样:100万个数按照1000个余数类划分,⌈1000000/1000⌉ = 1000,必有一个余数类里至少有1000个数。

这个形式的重要性在于,它把"存在一个"增强为"存在一个,而且这个至少是多少"。做题时,如果你的目标是"证明至少存在k个某种对象",只要物体总数m和类别数n满足⌈m/n⌉≥k,目标就直接达成了,不需要任何精巧构造。

4.2 平均值语言:和、平均与"必有超过"

第二种进阶是把鸽巢原理翻译成平均值的话,你会发现它其实无处不在。

比如一学期有20次小测,平均分是82分,那么必然存在一次小测,分数不低于82分。这是废话,因为平均值的定义就保证了这一点。但换成复杂场景就不那么废话了:如果100个数的总和超过10000,那么至少有一个数大于100。再比如,连续30天的日均气温高于28°C,那必然有某一天的气温高于28°C。

这些表述本质上都是同一个原理:如果所有个体都低于某个阈值,那么平均值不可能超过这个阈值;一旦平均值超过了,个体里就必然存在超过者。

竞赛里这种用法也很常见。比如"M个数之和超过某个界限,证明存在若干个数加起来超过某个下界"这样的题,切入点往往就是把整体按平均值切一刀。我当时学到这里才意识到,原来鸽巢原理和不等式、平均值定理是血脉相连的。

4.3 无限版本:有限抽屉里的无穷成员

鸽巢原理还有一个专门处理无穷集合的版本,说法是这样的:

把无穷多个物体放进有限个抽屉,至少有一个抽屉里装着无穷多个物体。

证明依然靠反证:如果每个抽屉都只有有限个物体,那么有限个抽屉加起来也就只有有限个物体,这和"无穷多个物体"矛盾。

这个版本听起来也很平凡,但它比有限版本更加强大。举个例子:正整数无穷多,如果按末位数字分成10类(末位0、1、...、9),那么必有一类包含无穷多个正整数——这几乎是一句废话。但更深刻的应用在数论里:给定一个整数序列,如果把它按对某个数取模的余数分成有限类,就能立刻知道至少有一类余数对应着无穷多个序列项。这种"从无穷中砍出一块来研究"的手法,是很多数论和组合论证的基本功。

从无限鸽巢原理再往前走一步,就通向了拉姆齐理论的深层领域——只要某个结构足够大,必然包含某种规则的局部结构。六人相识问题只是这个宏大理论的一扇小门,门后面是无限组合学里的大片疆土。

5. 为什么鸽巢原理容易用错:常见误区与破题习惯

讲了这么多成功案例,我也得说说翻车案例。鸽巢原理看起来简单,实际做题时出错率却高得吓人。我总结了三个最常见的使用误区,再加上我这些年养成的破题习惯,供你对照自查。

5.1 方向别搞反:物体数必须大于抽屉数

先说最容易犯的低级错误:把鸽子和巢的位置搞反了。

鸽巢原理成立的前提是m > n。如果你手里只有5个人,却要分到12个星座,那什么也保证不了——5个人完全可以各自落在不同的星座里。有些人做这类题,看到"12个星座"和"5个人"就直接写"必有两个人在同一个星座",这就是典型的套公式失败。

反过来,13个人对12个月就一定产生碰撞,5个人对12个星座则完全没有碰撞保证。原理本身不关心具体是"人"还是"星座",它只关心数量关系。所以做题的第一步一定是确认:物体数是不是严格大于抽屉数?

我还见过有人把方向记成"抽屉数大于物体数时,必有空抽屉"——这个说法本身在特定条件下可以成立(如果物体数小于抽屉数,且每个物体占用一个抽屉,那么不可能装满所有抽屉,必然有空抽屉),但它和鸽巢原理是两码事,不能混淆。最好的办法是每次使用前在心里默念一遍:物体数 > 抽屉数,才会出碰撞。

5.2 抽屉要覆盖:划分不能有遗漏或重叠

第二个误区更隐蔽,那就是构造抽屉时没有保证"覆盖全体"和"互不重叠"。

举个例子。假设你想证明"10个数里必有两个数之和为偶数",你可能会想:把数分成"大于5的"和"小于5的"两类,然后期待什么。但这个分类根本不完整——等于5的数放哪?而且就算分成两类,每类里的数相加也不一定是偶数。除非你改用奇偶性:10个数分到奇数、偶数两个抽屉,⌈10/2⌉ = 5,必有一个抽屉至少5个。可光有5个同奇偶的数还不够,你要的是"两个",那5显然是够的。关键是这里要意识到:你选的分类标准必须和结论逻辑关联,否则就算鸽巢原理成立了,也推不出目标结论。

我见过不少学生在练习"1到10中任取6个数,必有两个数之和为11"这道题时,尝试过用"大小"分类,结果举步维艰。正确的做法是把数配成5对抽屉:(1,10)、(2,9)、(3,8)、(4,7)、(5,6),取6个数就是6只鸽子飞进5对抽屉,必然有一对的两个数都被取到,它们的和正好是11。

这里有个很好的操作习惯:先画一张覆盖表,把每个物体标记到它所属的抽屉里,亲眼确认没有一个物体落空,也没有一个物体同时属于两个抽屉。数学直觉会骗人,但一张仔细画的表不会。

5.3 保证与概率是两回事

第三个误区,是把鸽巢原理的"必然保证"和现实中的"大概率"混为一谈。

最经典的例子还是生日:367个人必有两人同日生,这是确定性结论。而23个人中两个人生日相同的概率超过50%,这是概率论中生日悖论的结果。一个是"一定会",一个是"超过一半可能会",两者虽然数值接近,但逻辑上完全不同。

我见过有人把这两个结论混在一起,说"因为鸽巢原理,23个人里必有两个人同日生"——这显然是错的。23个人放到366个日期里,m < n,鸽巢原理根本不适用,它只是大概率有重复,而不是必然有。

还有一个好例子:掷一枚骰子,掷7次,鸽巢原理能保证什么?它保证至少有一种点数出现不少于2次。但它不能保证"至少出现一次6点"。你可能连续6次都是5点,第七次是1点,那就一次6点都没有。原理只保证重复,不保证指定结果。鸽巢原理给出的结论永远是存在性的,它不会告诉你是谁、在哪、什么时候,这一点一定要习惯。

5.4 我的破题习惯与练习清单

最后分享几个我自己多年积累的破题习惯,希望能帮你少走些弯路。

第一个习惯,拿到题目先划关键词。出现"任意""至少""保证""必然存在"这类词,我立刻在草稿纸上画两个框:物体是什么?抽屉可能是什么?哪怕最后发现不是鸽巢题,这个动作也能帮我理清结构。

第二个习惯,先用简单数字试出感觉。比如题目说"任取n+1个数",我就先代入n = 3或n = 5,动手枚举一个小范围,看看碰撞大概出现在哪。很多时候小规模的直觉会直接告诉你抽屉该怎么构造。

第三个习惯,抽屉候选清单化。我脑子里常备一份"抽屉来源"清单:余数类、奇偶性、颜色、区间等分、图形分割、配对分组、同余类、相同某种结构。遇到难题就逐个试,试到能推出⌈m/n⌉达到目标为止。

再给你一组适合上手的练习,自己做完以后对照检查:

  1. 任取11个整数,证明必有两个数之差是10的倍数。(提示:按模10的余数分类)
  2. 从1到10中任取6个数,证明必有两个数之和为11。(提示:把和为11的数配成5对,5对当抽屉)
  3. 在一个边长为1的正方形内任取5个点,证明必有两个点的距离不超过√2/2。(提示:把正方形等分成4个小正方形)
  4. 任意给定5个整数,证明其中必有3个数之和能被3整除。(提示:按模3余数分类后分情况讨论)

最后一道题相对难一点,但做完之后你会对"鸽巢 + 分类讨论"的组合有更深的理解。

我记得第一次在有经验的教练面前演示这道题时,对方问了我一句:你知道吗,这道题再往下推广,就是"任意n个整数里必有若干个之和被n整除"的经典定理了。那个瞬间我才意识到,鸽巢原理不是一个孤立的技巧,它是一整片知识网络的源头节点。

这么多年过去了,我最大的体会是:原理简单,难的是你愿不愿意先在草稿纸上把抽屉画出来。很多人不是不懂鸽巢原理,而是面对新题时,脑子里只有原理的"文字"而没有"操作"。当你开始认真地划分、列表、查覆盖、算⌈m/n⌉的时候,鸽子自然就藏不住了。希望这篇内容能让你在下次遇到"至少""保证"这类字眼时,多一种从容的底气。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询