1 简介
鸽巢原理有许多名字,最普通的名字叫鸽巢原理,其他名字有狄利克雷(Dirichlet)抽屉原理、鞋盒(shoebox)原理。对鸽巢原理粗略地描述就是如果有许多鸽子飞进不够多的鸽巢内,那么至少要有一个鸽巢要被两个或多个鸽子占据。
2 鸽巢原理(简单形式)
定理:如果要把 n + 1 n+1 n+1个物体放进 n n n个盒子,那么至少有一个盒子包含两个或更多的物体。
可以说这个定理是相当显然的,如果 n n n个盒子中的每一个都至多含有一个物体,那么物体的总数最多是 n n n。这与 n + 1 n+1 n+1个物体矛盾。这个定理只是简单地断言,它只能保证这样盒子的存在性,因此,在使用鸽巢原理去证明一个排列或某种现象的存在时,在不考察所有可能性的情况下,它都不能对如何构造排列或寻找某一现象的例子给出任何有价值的指导。
下面是两个简单的应用:
应用1:在13个人中存在两个人,他们的生日在同一月份里
应用2:设有
n
n
n对已婚夫妇。至少要从这
2
n
2n
2n个人中选出
n
+
1
n+1
n+1人才能保证能够选出一对夫妇
与鸽巢原理相关的其他原理:
- 如果将 n n n个物体放入 n n n个盒子并且没有一个盒子是空的,那么每个盒子恰好有一个物体。
- 如果将 n n n个物体放入 n n n个盒子并且没有盒子被放入多于一个的物体,那么每个盒子里有一个物体。
这三个原理的更抽象表述为:设 X X X和 Y Y Y是有限集合,并令 f : X → Y f:X\rightarrow Y f:X→Y是一个从 X X X到 Y Y Y的函数
- 如果 X X X的元素多于 Y Y Y的元素,那么 f f f就不是一一映射
- 如果 X X X和 Y Y Y含有相同个数的元素,并且 f f f是满射,那么 f f f就是一一映射
- 如果 X X X和 Y Y Y含有相同个数的元素,并且 f f f是一一映射,那么 f f f就是满射
下面介绍几个鸽巢原理的应用
应用1
在13个人中存在两个人,他们的生日在同一月份里
应用2
设有 n n n对已婚夫妇。至少要从这 2 n 2n 2n个人中选出 n + 1 n+1 n+1人才能保证能够选出一对夫妇
应用3
给定 m m m个整数 a 1 , a 2 , ⋯ , a m a_1,a_2,\cdots, a_m a1,a2,⋯,am,存在满足 0 ≤ k < l ≤ m 0\le k\lt l \le m 0≤k<l≤m的整数 k k k和 l l l,使得 a k + 1 + a k + 2 + ⋯ + a l a_{k+1} + a_{k+2} + \cdots +a_l ak+1+ak+2+⋯+al能被 m m m整除。通俗地说,就是在序列 a 1 , a 2 , ⋯ , a m a_1,a_2,\cdots, a_m a1,a2,⋯,am中存在连续的 a a a,这些 a a a的和能被 m m m整除。
证明:
考虑
m
m
m个前缀和
s
i
s_i
si(指的是从序列开始位置到某一位置的和):
s
1
=
a
1
s
2
=
a
1
+
a
2
s
3
=
a
1
+
a
2
+
a
3
⋮
s
m
=
a
1
+
a
2
+
⋯
+
a
m
\begin{aligned} &s_1=a_1\\ &s_2=a_1+a_2\\ &s_3=a_1+a_2+a_3\\ &\vdots \\ &s_m=a_1 +a_2+\cdots + a_m \end{aligned}
s1=a1s2=a1+a2s3=a1+a2+a3⋮sm=a1+a2+⋯+am
知道了这
m
m
m个前缀和后,对于
a
k
+
1
+
a
k
+
2
+
⋯
+
a
l
a_{k+1} + a_{k+2} + \cdots +a_l
ak+1+ak+2+⋯+al序列的和就可以通过
s
l
−
s
k
s_l-s_k
sl−sk得来。我们知道一个数除以
m
m
m得到的余数是
1
,
2
,
⋯
,
m
−
1
1,2,\cdots,m-1
1,2,⋯,m−1中的一个,对于这
m
m
m个前缀和,根据鸽巢原理,必有两个除以
m
m
m有相同的余数。设余数为
r
r
r,则存在
k
<
l
k\lt l
k<l使得:
s
l
≡
s
k
(
m
o
d
r
)
s_l \equiv s_k\ (mod\ r)
sl≡sk (mod r)
即:
s
l
−
s
k
=
a
k
+
1
+
a
k
+
2
+
⋯
+
a
l
=
c
m
s_l - s_k = a_{k+1} + a_{k+2} + \cdots +a_l=cm
sl−sk=ak+1+ak+2+⋯+al=cm
即:
m
∣
a
k
+
1
+
a
k
+
2
+
⋯
+
a
l
m\mid a_{k+1} + a_{k+2} + \cdots +a_l
m∣ak+1+ak+2+⋯+al
应用4
一位国际象棋大师有 11 11 11周的时间备战一场锦标赛,他决定每天至少下一盘棋,但为了不使自己过于疲劳他还决定每周不能下超过 12 12 12盘棋。证明存在连续若干天,期间这位大师恰好下了 21 21 21盘棋。
证明:
设
a
1
a_1
a1是在第一天所下的盘数,
a
2
a_2
a2是第一天和第二天所下的总盘数(就是前面说的前缀和),以此类推。因为每天至少下一盘棋,因此我们会得到一个严格递增序列:
a
1
,
a
2
,
⋯
,
a
77
a_1,a_2,\cdots,a_{77}
a1,a2,⋯,a77
另外,由于每周不能下超过
12
12
12盘棋,所以
a
77
≤
11
∗
12
=
132
a_{77}\le 11*12=132
a77≤11∗12=132,故有:
1
≤
a
1
<
a
2
<
⋯
<
a
77
≤
132
1\le a_1 \lt a_2 \lt \cdots \lt a_{77} \le 132
1≤a1<a2<⋯<a77≤132
序列
a
1
+
21
,
a
2
+
21
,
⋯
,
a
77
+
21
a_1+21,a_2+21,\cdots,a_{77}+21
a1+21,a2+21,⋯,a77+21也是一个严格递增序列:
22
≤
a
1
+
21
<
a
2
+
21
<
⋯
<
a
77
+
21
≤
153
22\le a_1+21 \lt a_2+21 \lt \cdots \lt a_{77}+21 \le 153
22≤a1+21<a2+21<⋯<a77+21≤153
于是,这
154
154
154个数:
a
1
,
a
2
,
⋯
,
a
77
,
a
1
+
21
,
a
2
+
21
,
⋯
,
a
77
+
21
a_1,a_2,\cdots,a_{77},a_1+21,a_2+21,\cdots,a_{77}+21
a1,a2,⋯,a77,a1+21,a2+21,⋯,a77+21
中的每一个数都是
[
1
,
153
]
[1,153]
[1,153]之间的整数,又因为左半边和右半边都是严格递增的两个序列,所以根据鸽巢原理,一定存在
i
,
j
i,j
i,j满足
a
j
=
a
i
+
21
a_j = a_i + 21
aj=ai+21,即:
i
+
1
,
i
+
2
,
⋯
,
j
i+1,i+2,\cdots,j
i+1,i+2,⋯,j
天总共下了21盘棋。
应用5
从整数 1 , 2 , ⋯ , 200 1,2,\cdots,200 1,2,⋯,200中选出 101 101 101个整数。证明:在所选的这些整数之间存在两个这样的整数,其中一个可被另一个整除。
证明:
通过分解出尽可能多的 2 2 2因子,任意整数都可以写成 2 k ∗ a 2^k*a 2k∗a的形式,其中 k ≥ 0 k\ge 0 k≥0, a a a为奇数。对于 [ 1 , 200 ] [1,200] [1,200]之间的整数, a a a是 100 100 100个数 1 , 3 , 5 , ⋯ , 199 1,3,5,\cdots,199 1,3,5,⋯,199中的一个。因此在所选的 101 101 101个整数中存在两个整数,当写成上述形式时这两个数具有相同的 a a a值。令其为 2 r ∗ a , 2 s ∗ a 2^r*a,2^s*a 2r∗a,2s∗a,根据 r , s r,s r,s的大小关系可知必定有一个数整除另一个数。
3 鸽巢原理(加强版)
4 参考资料
- 《组合数学》第五版 P42-P44