freeCodeCamp/guide/chinese/mathematics/counting/pigeonhole-principle/index.md

2.4 KiB
Raw Blame History

title localeTitle
Pigeonhole Principle 鸽笼原理

鸽笼原理

鸽笼原则是一种逻辑和直观观察的数学形式化。用一个例子可以最好地理解这种观察。

有五个盒子和六个球。将六个球中的每一个放入五个盒子中的一个中。 _必须_至少有一个盒子其中至少有两个球。如果将五个球放入五个盒子中使得没有盒子中有两个球那么无论第六个球被放入什么盒子该盒子将有多个球。

概括

对于N个盒子和M个球这个观察可以推广。如果有N个盒子和M个球并且M> N那么至少一个盒子必须包含多个球。

请注意,鸽笼原则并没有告诉我们哪个盒子有多个球,或者任何一个盒子有多少球。鸽笼原则仅表明存在多个球的盒子。

用于计算机科学

鸽笼原则经常出现在计算机科学中。例如SHA256散列算法接受任何大小的输入如字符串并输出256位值。由于SHA256散列算法的输出始终为256位因此存在2 ^ 256个可能的散列。虽然这是一个非常大的数字但是有无数可能的输入。使用上面的概括我们可以说我们的N = 2 ^ 256和我们的M =无穷大。因为无穷大大于2 ^ 256M> N所以通过Pigeonhole原则这些散列中的至少一个必须具有两个不同的输入这些输入散列到相同的值。计算机科学家称两个不同的输入共享共同的哈希冲突。

用于一般计数问题

我们可以使用鸽笼原则来证明一些更深奥的东西。一个常见的例子是头发计数问题。人体头部有0到约150,000根头发。为了保持安全让我们说一个人的头上可以有多达一百万根头发。法国巴黎的人口约为220万。如果我们根据他们头上有多少头发将巴黎的每个人分成盒子那么我们可以使用上面的概括来说N = 1000000盒子的数量每个可能的头发数一个盒子和M = 2200000法国巴黎的人口。由于M> N根据鸽笼原则我们可以肯定地说巴黎至少有两个人头上必须有相同数量的头发。

更多信息: