题目:
有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??
思路:最简单的,扔一个到51层 ,碎了,再试后面50层 ,没碎再试前面50层,总共50次。时间复杂度较高。是个烂方法。
有没有一种方法,能分段查找呢。一个球均匀分段的扔,比如 20层20层的扔,如果在40层破,我从20层扔到40层。这样大大提高了效率。但是怎样才能得到好的分段呢?第一次扔k层 ,则次数time=1,第二次,如果破了,要试从1到k-1层,此时需要Time=time+k-1=k 次;
如果没破,还要扔k层,则次数为time=2;如果破了,还要扔k+1到2k-1层,再加上2 即Time=Time+k-2=k。还是K次;
注意每多扔一次 少测试一层。次数却多一次。实际只要能测到n-1层就够了
以此类推如果满足 k+(k-1)+(k-2)+k-3+k-4+....+2+1>=n-1 。
可以化简得到:k(k-1)>=2(n-1)
这里,n=100 所以 解得k=14。
所以只要14次就可以确认那层试临界层。