Processing math: 100%

鸡蛋从多少层掉下不破

有一个 100 层的建筑。如果鸡蛋从第 N 层或更高掉下来就会碎,低于 N 层就不会碎。给你两个鸡蛋,找到这个 N。要求是使得最坏情况下次数最少。

如何找到答案呢?让第一个鸡蛋去大致试一下楼层,第二个鸡蛋精确的去找到 N。比如,第一个鸡蛋从 10 层扔下去,没碎,但是从 15 层扔下去碎了,那么 N 可能是 11,12,13,14 这四层,第二个鸡蛋必须从最小的开始去找,不然的话,碎了后面就没办法实验了。

我们先尝试一下,假设第一个鸡蛋按照 10,20,30 这样子扔。第二个鸡蛋从 X1,X2, 这样子扔,最坏情况下,N 是 99,那么总共需要 19 次就能得到结果。看起来,是个不错的结果。

最坏情况下次数最少,还能比 19 更少了吗?

我们创建这样一种机制: 1. 完美的负载平衡的系统,不管第一个鸡蛋在哪里碎了,总数是一样的 2. 第一个鸡蛋每多扔一次,那么第二个鸡蛋就要少扔一次。比如,考虑第一个鸡蛋 10 层扔完之后情况。我们尝试 20 层,扔完破了,这一次尝试,第二个鸡蛋最多要扔 9 次找到 N。如果没破,那么第一个鸡蛋再次尝试的时候,第二个鸡蛋最多就只能扔 8 次,也就是说第一个鸡蛋下一次应该去试 29 层。 3. 抽象一些,第一个鸡蛋第一次尝试 X 层,下一次增长量是 X1 层,再然后是 X2 层,直到 100 层。 4. 解出 X 的值。X+(X1)+(X2)++1=100。可以得到 X=14

这样能保证最多 14 次,一定能找到 N

其他这样的最优化问题,一个关键思想就是使得最差情况平衡一些,也就是让最坏情况不要变得这么坏。