组合数学与离散数学
抽屉原理
若物品数量多于抽屉数量,则必有一个抽屉装有不止一件物品。
直观为什么必有两只鸽子共用一个鸽笼
假设你有 10 只鸽子,却只有 9 个鸽笼,并且每只鸽子都必须飞进某个鸽笼。无论怎样巧妙地安排,总会有至少一个鸽笼里装有两只或更多鸽子——道理很简单,鸽笼的数量不够每只鸽子各占一个。这个听起来显而易见的事实被称为抽屉原理(鸽笼原理),尽管简单,它却能证明数论、几何学和计算机科学中出人意料的深刻结果。
一个连接 10 只鸽子与 9 个鸽笼的二部网络:无论怎样连边,由于 10>9,必有一个鸽笼顶点至少接收两条边。中学精确陈述原理
定义: 抽屉原理
如果把 n 件物品放入 k 个盒子,且 n>k,那么至少有一个盒子里装有至少 2 件物品。更一般地,如果把 n 件物品放入 k 个盒子,那么必有一个盒子装有至少 ⌈n/k⌉ 件物品。
n>k ⟹ ∃ box with≥2 objects 数 ⌈n/k⌉(“n/k 向上取整”)是不小于 n/k 的最小整数;它是把 n 件物品尽可能平均地分到 k 个盒子时,最满的盒子所保证达到的最小数量。例如把 n=10 件物品尽可能平均地分到 k=3 个盒子,得到 4,3,3,而 ⌈10/3⌉=4 恰好吻合。
⌈kn⌉=⌊kn−1⌋+1 多少物品、多少盒子、能保证什么| 物品数 n / 盒子数 k | 最满盒子中保证的最小数量 |
|---|
| n=10, k=9 | ⌈10/9⌉=2 |
| n=13, k=12 | ⌈13/12⌉=2 |
| n=100, k=9 | ⌈100/9⌉=12 |
| n=k+1, k 任意 | ⌈(k+1)/k⌉=2 |
大学两个定理:基本原理与推广原理
如果把 n 件物品分配到 k 个盒子中,且 n>k,那么至少有一个盒子装有至少 2 件物品。
为什么成立?
这本质上是一个计数命题,通过反证法证明:如果每个盒子至多装 1 件物品,那么所有盒子总共容纳的物品数不可能超过 k。
证明
为反证,假设结论不成立:k 个盒子中的每一个都至多装有 1 件物品。
那么分配出去的物品总数至多为 k×1=k。
但我们分配的是 n 件物品,且由假设 n>k,所以分配出去的物品总数是 n>k。
对同一批物品的这两种计数相互矛盾(n>k,但总数又 ≤k),所以反证假设不成立:必有一个盒子装有至少 2 件物品。
如果把 n 件物品分配到 k 个盒子中,那么必有一个盒子装有至少 ⌈n/k⌉ 件物品。
为什么成立?
基本原理只能保证某处有 2 件物品;推广版本把这一点精确化为把 n 件物品平均分配到 k 个盒子时被迫达到的确切最小值,使用相同的反证思路,但与 ⌈n/k⌉−1 而不是 1 比较。
证明
为反证,假设每个盒子都至多装有 ⌈n/k⌉−1 件物品。
那么分配出去的物品总数至多为 k(⌈n/k⌉−1)。
由于 ⌈n/k⌉ 是不小于 n/k 的最小整数,故 ⌈n/k⌉−1<n/k,于是 k(⌈n/k⌉−1)<k⋅kn=n。
于是分配出去的总数严格小于 n,这与全部 n 件物品都已分配相矛盾。因此必有一个盒子装有至少 ⌈n/k⌉ 件物品。
大学实际应用与典型例题
尽管简单,抽屉原理是计算机科学(证明键数多于槽位数的哈希表必然发生冲突)、数论(证明给定整数的某个倍数具有特定的数字模式)以及日常生活中关于排班、排序和社交网络的组合谜题中的标准工具。
例题: 抽屉里的袜子
抽屉里有 4 种颜色的袜子,每种颜色都很多,但在黑暗中混在一起。你至少要取出多少只袜子,才能保证得到一对同色的袜子?
解答
把 4 种颜色看作 k=4 个盒子,把每只取出的袜子看作放入对应颜色盒子里的一件物品。“同色一对”意味着某个盒子接收到至少 2 件物品。
根据基本抽屉原理,一旦取出的袜子数 n 满足 n>k=4,即 n≥5,就必有某个颜色的盒子装有至少 2 只袜子——保证凑成一对同色袜子。
5 真的是最小的数吗?只取 4 只袜子时,(运气不好的话)可能恰好在 4 种颜色中各取一只,还没有配成对。所以 4 只不能保证配对,但 5 只可以。
答案是 5 只袜子。
例题: 聚会中好友数相同的两个人
在一个有 n≥2 人参加的聚会上,“朋友”关系是相互的,且没有人是自己的朋友。证明聚会中必存在两个人,他们在场的朋友数恰好相同。
解答
聚会中每个人的朋友数都是 0 到 n−1 之间的整数(不可能比在场的其余 n−1 人拥有更多朋友),这给出 n 个可能值与 n 个人——如果直接把抽屉原理用在朋友数上,只有 n 个盒子对应 n 个人,还不能强制产生碰撞。
关键的额外观察是:数值 0 与 n−1 不可能同时出现:如果有人朋友数为 0,那么就不可能有人朋友数为 n−1(那意味着与所有人都是朋友,包括那个人自己),反之亦然。所以实际上只有 n−1 个不同的朋友数取值可能出现:要么是 {0,1,…,n−2},要么是 {1,2,…,n−1}。
现在对 n 个人(物品)和至多 n−1 个可能的朋友数(盒子)应用基本抽屉原理。由于 n>n−1,必有某个朋友数盒子接收到至少 2 个人。
因此聚会中至少有两个人在场的朋友数恰好相同。
如果 13 只鸽子飞入 12 个鸽笼,基本抽屉原理能保证什么?
利用推广的抽屉原理,当 n=100 件物品放入 k=9 个盒子时,最满盒子中保证的最小数量是多少?
下列哪个日常情形是抽屉原理的直接应用?
在朋友关系是相互的聚会例子中,为什么在 n 位客人中,朋友数 0 与 n−1 不能同时出现?