两个玻璃球求临界楼层问题
来源:互联网 发布:centos ip 命令不存在 编辑:程序博客网 时间:2024/06/11 23:27
问题描述:
有一栋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楼层和两个玻璃球
- 两个玻璃球问题(Google)
- 两个玻璃球和 100层高楼 问题
- 三个鸡蛋(玻璃球、围棋子)确定楼层问题公式推导
- 确定临界楼层
- 玻璃球问题
- 关于两个鸡蛋判断楼层问题
- 100层楼和两个玻璃球的问题
- 两个玻璃球和100层楼的问题
- 100层楼和两个玻璃球的问题
- 100层楼和两个玻璃球的问题
- 【寻找临界楼层】面试难题
- 100层楼丢玻璃球问题
- 扔玻璃球问题
- 腾讯抛玻璃球问题
- 两个鸡蛋测楼层
- 玻璃球
- HDU 5877 Weak Pair
- Android Webview中调用了Js的时候混淆注意事项
- 记录学习的点滴(Java多线程学习)
- c语言温习-关于冒泡排序的一点理解
- 详解android:scaleType属性
- 两个玻璃球求临界楼层问题
- App弱网测试与常用模拟工具
- 017-JG JNLE(大于转移)指令+
- 搭建 AngularJS+Ionic+Cordova开发APP----- win10环境运行一个Ionic_demo
- 四种mysql存储引擎
- 018-JL,JNGE JLE,JNG JG,JNLE JGE,JNL带符号条件转移指令小结
- centos php+mysql+nginx基础环境搭建
- 不同操作系统的换行符
- 019-无符号数条件转移指令JA JNBE(大于)