想象一下你和一只猫在一栋高楼里。这只猫可以从低楼层的窗户上摔下来,但是如果从高楼层摔下来,它就会死掉。你怎样才能用最少的尝试次数来计算出猫能够存活的最长下落时间呢?
显然,如果你只有一只猫,那么你只能线性搜索。先把猫从一楼扔下去。如果它还活着,就从第二节开始扔。最终,猫被从地板上扔下来后,就会死去。然后你就知道 f-1楼层是最安全的楼层。
但如果你养了不止一只猫呢?现在可以尝试某种对数搜索。假设这栋楼有100层,你有两只一模一样的猫。如果你把第一只猫从50层扔出去,它死了,那么你只需要直线搜索50层。如果你选择一个较低的楼层作为你的第一次尝试,你可以做得更好。假设你选择一次解决20层楼的问题,而第一层致命楼层是50英镑。在这种情况下,你的第一只猫会在从20层到40层的飞行中存活下来,然后在60层死去。你只需要逐层检查41到49层。这总共是12次尝试,这比您尝试使用二进制消除所需的50次要好得多。
一般来说,对于一个有两只猫的 n 层建筑来说,什么是最好的策略,什么是最坏情况下的复杂性?那 N 楼层和 M 猫呢?
假设所有的猫都是等价的: 它们都会从一个给定的窗口掉下来而死亡或者幸存。此外,每一次尝试都是独立的: 如果一只猫从高处坠落幸存下来,它完全没有受到伤害。
这不是家庭作业,虽然我可能已经解决了一次学校作业。这只是今天突然冒出来的一个古怪的问题,我不记得解决方法了。如果有人知道这个问题的名字或者解决算法,就会得到额外的分数。