有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??
解题思路:
假如只有一个球,那很显然,只有一个办法:从第一层开始投,如果没碎再试第二层、第三层.....
现在有两个球,我们应该利用第一个球缩小临界楼层所在的楼层范围,可能会想到第一个球先从50层开始投,如果碎了,再用最后一个球从第一层开始投,最多到49楼肯定可以找到临界楼层,如果没碎那就说明临界楼层在50-100中,此时继续尝试75楼....
可惜,上面的方法并非是最好的。因为最坏情况的投掷次数分布不均匀。比如,如果50楼碎了,此时最坏情况下需要尝试50次,如果50楼没碎,而75层不管是否碎了,最坏情况也只需要尝试25次,也就是说,50楼投掷结果不同,所需最坏情况下的次数也不同,这就是分布不均匀的意思,那是否有办法让其分布均匀,也就是说假如在f层投,不管碎还是不碎,继续时最坏情况所需次数也是一样的。这样才能使最坏情况下所需投掷次数达到最小。
假设一开始从第k层投,如果坏了,那么第二个球可以在剩下的k-1层一定能用k-1次确定哪层坏,再加上第k层的那次,所以总共k次。如果第k层没有坏,那么第一个球在第k层的基础上再加k-1层(注意不是k层,原因见后面),所以第二次从2k-1层投下,在k,k+1,k+2,……,2k-2,2k-1中则有k-2层,所以用k-2次才能找出,再加上原来的那