MathLabs

组合数学与离散数学

抽屉原理

若物品数量多于抽屉数量,则必有一个抽屉装有不止一件物品。

直观为什么必有两只鸽子共用一个鸽笼

假设你有 1010 只鸽子,却只有 99 个鸽笼,并且每只鸽子都必须飞进某个鸽笼。无论怎样巧妙地安排,总会有至少一个鸽笼里装有两只或更多鸽子——道理很简单,鸽笼的数量不够每只鸽子各占一个。这个听起来显而易见的事实被称为抽屉原理(鸽笼原理),尽管简单,它却能证明数论、几何学和计算机科学中出人意料的深刻结果。

展示 $10$ 个鸽子顶点映射到 $9$ 个鸽笼顶点的网络图,其中一个接收两条边的鸽笼被高亮显示。
一个连接 1010 只鸽子与 99 个鸽笼的二部网络:无论怎样连边,由于 10>910 > 9,必有一个鸽笼顶点至少接收两条边。

中学精确陈述原理

定义: 抽屉原理

如果把 nn 件物品放入 kk 个盒子,且 n>kn > k,那么至少有一个盒子里装有至少 22 件物品。更一般地,如果把 nn 件物品放入 kk 个盒子,那么必有一个盒子装有至少 ⌈n/k⌉\lceil n/k\rceil 件物品。

n>k ⟹ ∃ box with≥2 objectsn>k\ \Longrightarrow\ \exists\text{ box with}\ge2\text{ objects}

数 ⌈n/k⌉\lceil n/k\rceil(“n/kn/k 向上取整”)是不小于 n/kn/k 的最小整数;它是把 nn 件物品尽可能平均地分到 kk 个盒子时,最满的盒子所保证达到的最小数量。例如把 n=10n=10 件物品尽可能平均地分到 k=3k=3 个盒子,得到 4,3,34,3,3,而 ⌈10/3⌉=4\lceil 10/3\rceil=4 恰好吻合。

⌈nk⌉=⌊n−1k⌋+1\left\lceil\frac{n}{k}\right\rceil=\left\lfloor\frac{n-1}{k}\right\rfloor+1
多少物品、多少盒子、能保证什么
物品数 nn / 盒子数 kk最满盒子中保证的最小数量
n=10, k=9n=10,\ k=9⌈10/9⌉=2\lceil 10/9\rceil=2
n=13, k=12n=13,\ k=12⌈13/12⌉=2\lceil 13/12\rceil=2
n=100, k=9n=100,\ k=9⌈100/9⌉=12\lceil 100/9\rceil=12
n=k+1, kn=k+1,\ k 任意⌈(k+1)/k⌉=2\lceil (k+1)/k\rceil=2

大学两个定理:基本原理与推广原理

如果把 nn 件物品分配到 kk 个盒子中,且 n>kn>k,那么至少有一个盒子装有至少 22 件物品。

为什么成立?

这本质上是一个计数命题,通过反证法证明:如果每个盒子至多装 11 件物品,那么所有盒子总共容纳的物品数不可能超过 kk。

证明

为反证,假设结论不成立:kk 个盒子中的每一个都至多装有 11 件物品。

那么分配出去的物品总数至多为 k×1=kk\times1=k。

但我们分配的是 nn 件物品,且由假设 n>kn>k,所以分配出去的物品总数是 n>kn>k。

对同一批物品的这两种计数相互矛盾(n>kn>k,但总数又 ≤k\le k),所以反证假设不成立:必有一个盒子装有至少 22 件物品。

如果把 nn 件物品分配到 kk 个盒子中,那么必有一个盒子装有至少 ⌈n/k⌉\lceil n/k\rceil 件物品。

为什么成立?

基本原理只能保证某处有 22 件物品;推广版本把这一点精确化为把 nn 件物品平均分配到 kk 个盒子时被迫达到的确切最小值,使用相同的反证思路,但与 ⌈n/k⌉−1\lceil n/k\rceil-1 而不是 11 比较。

证明

为反证,假设每个盒子都至多装有 ⌈n/k⌉−1\lceil n/k\rceil-1 件物品。

那么分配出去的物品总数至多为 k(⌈n/k⌉−1)k\left(\lceil n/k\rceil-1\right)。

由于 ⌈n/k⌉\lceil n/k\rceil 是不小于 n/kn/k 的最小整数,故 ⌈n/k⌉−1<n/k\lceil n/k\rceil-1<n/k,于是 k(⌈n/k⌉−1)<k⋅nk=nk\left(\lceil n/k\rceil-1\right)<k\cdot\frac{n}{k}=n。

于是分配出去的总数严格小于 nn,这与全部 nn 件物品都已分配相矛盾。因此必有一个盒子装有至少 ⌈n/k⌉\lceil n/k\rceil 件物品。

大学实际应用与典型例题

尽管简单,抽屉原理是计算机科学(证明键数多于槽位数的哈希表必然发生冲突)、数论(证明给定整数的某个倍数具有特定的数字模式)以及日常生活中关于排班、排序和社交网络的组合谜题中的标准工具。

例题: 抽屉里的袜子

抽屉里有 44 种颜色的袜子,每种颜色都很多,但在黑暗中混在一起。你至少要取出多少只袜子,才能保证得到一对同色的袜子?

解答

把 44 种颜色看作 k=4k=4 个盒子,把每只取出的袜子看作放入对应颜色盒子里的一件物品。“同色一对”意味着某个盒子接收到至少 22 件物品。

根据基本抽屉原理,一旦取出的袜子数 nn 满足 n>k=4n>k=4,即 n≥5n\ge5,就必有某个颜色的盒子装有至少 22 只袜子——保证凑成一对同色袜子。

55 真的是最小的数吗?只取 44 只袜子时,(运气不好的话)可能恰好在 44 种颜色中各取一只,还没有配成对。所以 44 只不能保证配对,但 55 只可以。

答案是 55 只袜子。

例题: 聚会中好友数相同的两个人

在一个有 n≥2n\ge2 人参加的聚会上,“朋友”关系是相互的,且没有人是自己的朋友。证明聚会中必存在两个人,他们在场的朋友数恰好相同。

解答

聚会中每个人的朋友数都是 00 到 n−1n-1 之间的整数(不可能比在场的其余 n−1n-1 人拥有更多朋友),这给出 nn 个可能值与 nn 个人——如果直接把抽屉原理用在朋友数上,只有 nn 个盒子对应 nn 个人,还不能强制产生碰撞。

关键的额外观察是:数值 00 与 n−1n-1 不可能同时出现:如果有人朋友数为 00,那么就不可能有人朋友数为 n−1n-1(那意味着与所有人都是朋友,包括那个人自己),反之亦然。所以实际上只有 n−1n-1 个不同的朋友数取值可能出现:要么是 {0,1,…,n−2}\{0,1,\dots,n-2\},要么是 {1,2,…,n−1}\{1,2,\dots,n-1\}。

现在对 nn 个人(物品)和至多 n−1n-1 个可能的朋友数(盒子)应用基本抽屉原理。由于 n>n−1n>n-1,必有某个朋友数盒子接收到至少 22 个人。

因此聚会中至少有两个人在场的朋友数恰好相同。

如果 1313 只鸽子飞入 1212 个鸽笼,基本抽屉原理能保证什么?

利用推广的抽屉原理,当 n=100n=100 件物品放入 k=9k=9 个盒子时,最满盒子中保证的最小数量是多少?

下列哪个日常情形是抽屉原理的直接应用?

在朋友关系是相互的聚会例子中,为什么在 nn 位客人中,朋友数 00 与 n−1n-1 不能同时出现?