Google经典面试题: 鸡蛋应该怎么扔?
By Long Luo
微软、Google 等科技公司的面试题库中,流传着许多经典问题。小时候在杂志上看过微软那道著名的面试题 ——“为什么下水道井盖是圆的?”,当时觉得这类问题十分有趣,因为它考察的往往不是知识储备,而是分析问题的思维方式。
最近,我又重新翻到了 Google 的一道经典面试题 —— 双蛋问题( \(\textit{Two Eggs Problem}\) )或者说鸡蛋掉落问题( \(\textit{Egg Dropping Puzzle}\) )。与井盖问题不同,这道题更偏向数学推导与算法优化,但同样充满巧思。乍看之下,它只是一个简单的试验设计问题;深入分析后却会发现,其中隐藏着相当优美的最坏情况分析思想,是一道非常值得细细品味的经典题目。
这道题的原文如下:
You work in a \(100\) floor building and you get \(2\) identical eggs. You need to figure out the highest floor an egg can be dropped without breaking. Find an algorithm that is minimizing number of throws in the worst-case scenario.
你站在一栋 \(100\) 层高的大楼里,手中有 \(2\) 个完全相同的鸡蛋。有一未知的临界楼层,鸡蛋从临界楼层以下扔下去,一定不会碎;从临界楼层以上丢下去,一定会碎。已知未碎的鸡蛋可以重复使用,碎了的鸡蛋就不能再往下扔了。要求即便在最坏情况下,尝试次数也要尽可能少。请问最少需要尝试多少次能够找到这个临界楼层?
一个鸡蛋
如果只有 \(1\) 个鸡蛋,问题解法非常简单。我们别无选择,只能从一楼开始逐层测试。用这种方法一定能找到鸡蛋安全掉落的最高楼层:该楼层就是鸡蛋摔碎楼层的下一层。
那么在最坏情况下,最少需要尝试多少次?答案就是 \(100\) 次。因为最坏的情况就是临界楼层为第 \(100\) 层(若鸡蛋在第 \(100\) 层摔碎,则临界楼层为 \(99\) 层)。