--- title: Pigeonhole Principle localeTitle: 鸽笼原理 --- ## 鸽笼原理 鸽笼原则是一种逻辑和直观观察的数学形式化。用一个例子可以最好地理解这种观察。 ### 例 有五个盒子和六个球。将六个球中的每一个放入五个盒子中的一个中。 _必须_至少有一个盒子,其中至少有两个球。如果将五个球放入五个盒子中,使得没有盒子中有两个球,那么无论第六个球被放入什么盒子,该盒子将有多个球。 ### 概括 对于N个盒子和M个球,这个观察可以推广。如果有N个盒子和M个球,并且M> N,那么至少一个盒子必须包含多个球。 请注意,鸽笼原则并没有告诉我们哪个盒子有多个球,或者任何一个盒子有多少球。鸽笼原则仅表明存在多个球的盒子。 ### 用于计算机科学 鸽笼原则经常出现在计算机科学中。例如,SHA256散列算法接受任何大小的输入(如字符串)并输出256位值。由于SHA256散列算法的输出始终为256位,因此存在2 ^ 256个可能的散列。虽然这是一个非常大的数字,但是有无数可能的输入。使用上面的概括,我们可以说我们的N = 2 ^ 256和我们的M =无穷大。因为无穷大大于2 ^ 256(M> N),所以通过Pigeonhole原则,这些散列中的至少一个必须具有两个不同的输入,这些输入散列到相同的值。计算机科学家称两个不同的输入共享共同的哈希冲突。 ### 用于一般计数问题 我们可以使用鸽笼原则来证明一些更深奥的东西。一个常见的例子是头发计数问题。人体头部有0到约150,000根头发。为了保持安全,让我们说一个人的头上可以有多达一百万根头发。法国巴黎的人口约为220万。如果我们根据他们头上有多少头发将巴黎的每个人分成盒子,那么我们可以使用上面的概括来说N = 1000000(盒子的数量,每个可能的头发数一个盒子)和M = 2200000(法国巴黎的人口)。由于M> N,根据鸽笼原则我们可以肯定地说,巴黎至少有两个人头上必须有相同数量的头发。 #### 更多信息: * [维基百科 - 鸽笼原则](https://en.wikipedia.org/wiki/Pigeonhole_principle) * [Pigeonhole原则的更有趣的例子](https://mindyourdecisions.com/blog/2008/11/25/16-fun-applications-of-the-pigeonhole-principle/)