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