google玻璃球

有一栋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次才能找出,再加上原来的那两次,还是共用了k次(为了保持总共还是k次,所以上面只能加k-1层)

依次类推.....

在第2k-1层基础上再加k-2层,在第3k-3层基础上再加k-3层,……,依次类推,一定能加到在第某层的基础上再加2层,最后再原来的基础上面还能再加1层,到目前为止,设为第n-1层,如果第n-1层坏了,那么就是第n-1层,如果没有坏,根据已知题说某一层能摔碎球,那么在第n-1层上面有且仅还有一层就是刚摔坏的层(此时不需要实际投,而是直接推理得出),这时用的次数还是k次(最不理想的结果),所以k次能测最多n层,由上面的解说,可知n-1=k+(k+1)+(k+2)+(k+3)+……+2+1=k(k+1)/2,得n=k(k+1)/2+1,由上面可知n=100(层),k次最多能推测k(k+1)/2+1(层),所以k(k+1)/2+1≥100,得k(k+1)≥198,且k的最小整数为14,所以最多14次就能找出题目中的那层。
补充:由上得知,第一次在14层投,第二次在第27层投,则依次为14 27 39 50 60 69 77 84 90 95 99。还能得出14次最多能测得到106楼,只不过题目中给了100楼,如果是107楼,那么就需要15次了

猜你喜欢

转载自vergilwang.iteye.com/blog/2011231
今日推荐