问题描述:
有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层。
问题答案:
考虑best-worse case最坏情况下最优。也就是说假如你的算法是从第一楼逐楼往上试,那么相应最坏的情况是在100楼破,相应的是一百次。
这种情况下最优策略也就是从14楼开始递减间隔的办法,worst case 需要14次。
14 , 27(14 + 13) , 39(27 + 12) , 50(39 + 11) , 60(50 + 10) , 69(60 + 9) , 77(69 + 8) ,84(77 + 7) , 90(84 + 6) , 95(90 + 5) , 99(95 + 4)
问题分析:
作者:bh lin
链接:https://www.zhihu.com/question/31855632/answer/54367825
来源:知乎
记n层s球的问题为Q(n,s),对应的最坏情况最优解为ba(n,s);
一些简单的结果:
(0) ba(m,2)>=ba(n,2) 如果m>n,trivial.
(1) ba(n,1)=n
当你只剩下一个球,为了能够检验出临界点,你只能逐层检验,最坏情况下所需的检验次数为n;
(2)ba(1,2)=1
(3)iterative: 假设你从k层扔球,有两种情形:
球破。那么临界层必然在1层到k-1层之间,剩下一球,由(1)得出,最坏情况最优所需的步数为: 1 + ba(k-1,1)=k;
球不破。问题变成n-k层两球的问题Q(n-k,2), 所以最坏情况最优所需步数是:1+ba(n-k,2);
综合1,2,最坏情况所需步数: 
当k=1+ba(n-k,2)的时候,
ba(n,2)=ba(n-k,2)+1
结合(2),(3),由(2)迭代得知:
当n = 1+2+3+...+k
ba(n,2)=k
当k=13时, n=91;
ba(100,2)=max(9,1+ba(91,2))=14
所以100层,最坏情况最优策略的步数是14.
公式:
楼层 N,开始楼层为 f
f*(f+1)/2 >= N
求f的最小值
利用两个玻璃球,寻找100层高楼摔碎临界楼层的最优策略。通过从14楼开始递减间隔的方式,最坏情况下仅需14次尝试就能确定临界楼层。该策略基于最坏情况的分析和迭代计算,确保在最少的尝试次数下找到答案。
3294

被折叠的 条评论
为什么被折叠?



