一千年前是一家—— 一些鸽巢原理趣题

你或许已熟知这样一个原理:

当有n个笼子和n+1只鸽子,那么至少有一个笼子里有2只鸽子。

这就是“鸽巢原理”,又名"抽屉原理"或"鸽笼原理"等等。

这个原理听上去简直像废话,这是小学生都能懂的道理。但它既然能在数学里留下名字,它当然是很有用的一个原理,绝不是只能简单处理把鸽子放进笼子这样的情况。那么以下,我列举一些可以用鸽巢原理证明的有趣命题和结论。

先来一个比较简单的,生活化的例子。有若干人,在一个房间里聚会。聚会开始时互相握手认识。那么有这样一个结论:

在任何时刻,总存在两个人,与这两人握过手的人数,是相等的。

证明如下:

假设有一共有n个人,那么每个人可以握手的人数就是从0到n-1,一共有n种可能。一共有n个人,那么看上去似乎鸽巢原理用不上了呢?别急,这里面还有一个情况。如果有一个人,与其握过手的人数是n-1,那么就不应该有另一个人,与其握过手的人数是0了。同理,如果某个人一次也没有跟其他人握手,那么就不会有另一个人,与n-1个人握手。所以“0”与“n-1”,这两个数字不能共存。因此所有人的可能握手人数,其范围要么是从1到n-1,要么是从0到n-2,一共n-1种可能。

而总人数有n个人,所以必然存在2个人,他们的握手人数相等,证明完成。这个问题也经常用锦标赛来描述,结论就是,在一场锦标赛里,任何时刻总有两个人或两支队伍,他们比赛过的场次数是一样的。这是第一个例子。

再来一个比较偏数学的例子,考虑这样一个数列:

7, 77, 777, 7777,77777,777777, …

即由若干个7连写的数字构成的数列。请证明:这些数字中,至少有一个能被2027整除。

当然,你可以一个一个去试,直到找到这样一个能被2027整除的数字。但是这样很麻烦,即使用电脑编程求解,你也不知道程序需要跑多久。另外,2027是一个质数,所以你不用考虑与质因数分解相关的方法。

这里有一个使用鸽巢原理,且非常简洁的证明方法。而且,可以证明更强的结论:这个序列里不但肯定有可以被2027整除的数字,而且这个数字出现在前2027项以内。以下是证明。

首先,用反证法。假设这个数列的前2027项里,所有数字都不能被2027整除。那么这些数字除以2027,都会有余数,余数的取值范围是从1到2026,一共2026种。根据鸽巢原理,这个数列里的前2027中,必然有两个数字,它们除以2027后,所得余数相等,那么现在有意思了。

我们把这两个数字取出来,把大的那个去减去小的那个,考察相减后的数字。因为原先两个数字除以2027后余数相等,所以它们相减后,它们的差必然可以被2027整除,这一点是比较容易确认的。那么再看一下这个差值数字的形式。因为原先两个数字都是7连写构成的数字,那么它们相减后必然所得数字必然是若干个7在开头,后面有若干个0的形式:

7…70….0

这个数字可以改写为 7…7 × 10^n 的形式。

10^n是肯定不能被2027整除的,则那若干个“7”连写构成的整数必然能被2027整除。而那若干个“7”连写,本身就是数列的前2027项中的某一项,那么这个情况就与我们证明开始时的假设矛盾了!从而我们在证明开始时的假设不成立,这说明,这个数列的前2027项中必有一项可以被2027整除。

而这个证明也告诉我们,一般来说“鸽巢原理”给出的结论都是存在性的,而不是构造性的。这也是数学奇妙的地方之一,它可以告诉你一个东西肯定存在,但不知道在哪里。

再看一个比较生活化的例子。请证明:在任何一年,最少有4个月份,最多有5个月份,包含5个星期天。

你不信的话,可以马上看一下日历,数数有哪几个月有5个星期天。那么可以告诉你,有5个星期天的月份总是4个或5个,不过多也不会少。这个结论,可以简单得用鸽巢原理证明,大概也是唯一的方法。

因为一年365或366天,也就是52个星期多1天或2天。那么一年里至少有52个星期天,最多53个星期天(如果这一年元旦恰好是星期天)。我们要把这些星期天,分布到12个月里。因为每个月至少28天,至多31天,也就是每个月至少有4个星期天,最多5个星期天。

那么,现在就可以反证法了。如果只有3个月份有5个星期天,那么其他9个月份都是4个星期天,总共是3×5+9×4=51个星期天,就与这一天年至少有52个星期天矛盾了。而如果有6个月份有5个星期天,那么其他6个月份是4个星期天,总的星期天数量是6×5+6×4=54,这就与一天中最多53个星期天矛盾了。所以,一年中最少有4个月,最多有5个月份,包含5个星期天,证明完成!

而用鸽巢原理还能得出一些令人吃惊的有趣结论。比如,有这样一个结论:全体北京人中间,至少有两个人的头发数量相同,排除光头。这很好理解,因为人的平均头发数量是10万,不会超过15万,北京人口远超这个数量,所以北京肯定有2个人有相同的头发数量。而且北京人口实际超过2千多万,所以这个结论可以加强为:北京肯定有100个人,他们有相同数量的头发。

“鸽巢原理”可以告诉我们的一个最惊人的结论是这样一个(大概率成立的)命题:在最近1000年以内,存在这样一个历史上的人,这个人是你的父母亲的共同祖先!也就是,你的父母都是这个人的后代。

你可能会说,这怎么可能,我变成近亲结婚的后代了吗?你先别急,1000年以内,从生物学上讲已经完全不是近亲了。但是,这个结论是成立的吗?那么我们来论证一下这个结论,它可以用鸽巢原理非确定性的证明,但是大概率是成立的。

首先,如果我们从自己的父母向上追溯人口的话,你会发现每向上一代,你的祖先人数就会翻倍。你的父母有两个人;你的祖父祖母、外公外婆是4个人。你向上追溯n代,那么你就会有$2^n$个祖先。

那么我们假设每25年,有一代人的更迭。那么1000年的话,大约是40代。如果你的祖先40代,都是不同的人,那么总的人数就是2+4+8+....+2^{40}=2^{41}-1人,大约是2.2 × 10^{12},也就是22万亿人,这个数字太吓人了!根据历史记载,最近1000年,地球上存在过的人口数量,远小于22万亿人。所以,这就说明,你的祖先这40代人,不可能都是不同的人!很可能,有某人是你父母的共同祖先。

但为什么说这不是一个100%严谨的证明呢?因为还存在这样一种可能:你父亲这一支向上的祖先,发生过很多的合并,也就是你父亲的祖先里,有很多人有共同的祖先。同样,你母亲这一支的祖先中,也有很多人有共同的祖先。这样你父母亲的祖先这两支人口,就不需要那么多人了,有可能,你父母的祖先在1000年内完全是两个没有交集的群体。但这也说明,如果以上结论对你不成立,那么这个结论就会对你的父母更大概率的成立。

这就是鸽巢原理告诉我们的一个反直觉结论。它让我想起了一些延伸的结论。既然以上结论适合你的父母,其实它也适合任何两个人。

比如,中国人有句俗语,对同姓氏的人,我们常说“五百年前是一家”。根据以上推导,这句话还真不是一句客套话,而是可以从数学上证明的。同姓氏的两个人,非常有可能在500年内,有一个共同祖先,尤其是那些不常见的姓氏。

那么有关鸽巢原理,就聊到这里。鸽巢原理虽然内容简单,但是它确实能帮我们证明一些意想不到的结论。最后,出两道有意思的,与鸽巢原理相关的思考题,供大家消遣娱乐:

史密斯夫妇,邀请4对夫妇到家里来玩。这4对夫妇中,有些人是史密斯先生的朋友,有些是史密斯太太的朋友,有些互相之间认识,有些不认识。当这4对夫妇到达史密斯夫妇的家中后,所有之前互相认识的人都握手了一下。史密斯先生发现了一个有意思的情况,他说:如果把我排除在外,剩下的人中,每个人握手的次数都是不同的。这里,有两个隐含条件是:自己不会跟自己握手,夫妻之间也当然不需要握手。现在的问题是:史密斯太太握了几次手?

这个问题听上去是不是有点不可思议,因为已知条件如此至少,怎么突然就问史密斯太太握了几次手?但是,根据鸽巢原理,确实可以唯一的确定史密斯太太的握手次数。请你来做一次侦探,推理出这个数字。

参考文档:

Click to access A%20Walk%20Through%20Combinatorics%20An%20Introduction%20to%20Enumeration%20and%20Graph%20Theory.pdf