[原创]测试玻璃球抗摔程度
2014-04-05 21:02
260 查看
问题:一座共100层的高楼,现需测试玻璃球的抗摔程度,即从哪层掉落玻璃球恰好摔碎,假设玻璃球在各楼层恰好掉落摔碎的几率相同,请设计方案,使实验次数尽可能少。
解答:
若用1颗玻璃球,则需从1层到100层逐层测试,因此平均测试次数为(1+2+3+...+100)/100=50.5,如此测试肯定不是最优方案。
因此考虑用2颗玻璃球,第一颗玻璃球从低层到高层逐层测试,设序列为x1, x2, ..., xn. 当第一颗玻璃球在xi层掉落摔碎时,就用第二颗从xi-1+1层逐层向上测试,直到第xi-1层,因此共需要实验(i+xi-xi-1-1)次。故总的平均测试次数为:
[(1+x1-1)+(2+x2-x1-1)+(3+x3-x2-1)+...+(n+xn-xn-1-1)]/n = (1+2+3+...+n-1+xn)/n = 100/n + n/2 -1/2 >= 2*(50)^(1/2)-1/2 ≈ 13.6
因此平均测试次数为14,那么为了使每次测试次数都不超过14,则令i+xi-xi-1-1=14 可得x1=14,x2=27,x3=39,...,x11=99,x12=100。
故第一颗玻璃球测试楼层序列如上。
若不限制使用玻璃球的个数,则可考虑使用二分法,这样2^x = 100,x=7,最多需要7次实验,当然最多也需要准备7颗玻璃球。
解答:
若用1颗玻璃球,则需从1层到100层逐层测试,因此平均测试次数为(1+2+3+...+100)/100=50.5,如此测试肯定不是最优方案。
因此考虑用2颗玻璃球,第一颗玻璃球从低层到高层逐层测试,设序列为x1, x2, ..., xn. 当第一颗玻璃球在xi层掉落摔碎时,就用第二颗从xi-1+1层逐层向上测试,直到第xi-1层,因此共需要实验(i+xi-xi-1-1)次。故总的平均测试次数为:
[(1+x1-1)+(2+x2-x1-1)+(3+x3-x2-1)+...+(n+xn-xn-1-1)]/n = (1+2+3+...+n-1+xn)/n = 100/n + n/2 -1/2 >= 2*(50)^(1/2)-1/2 ≈ 13.6
因此平均测试次数为14,那么为了使每次测试次数都不超过14,则令i+xi-xi-1-1=14 可得x1=14,x2=27,x3=39,...,x11=99,x12=100。
故第一颗玻璃球测试楼层序列如上。
若不限制使用玻璃球的个数,则可考虑使用二分法,这样2^x = 100,x=7,最多需要7次实验,当然最多也需要准备7颗玻璃球。
相关文章推荐
- 压缩打包类命令
- SQLite-Java-Hibernate类似hibernate的数据库辅助工具
- YARN(YetAnother Resource Negotiator)
- nagios系列-----Redhat5.4下安装EPEL
- 可怕的阶乘
- MVC:界面开发的一般步骤
- C++ 文件IO
- 文件与目录类命令
- nagios系列-----通过yum安装Nagios
- XHTML+CSS
- hdu3040 Happy Girls 水题
- 终于搞定了一个莫名其妙的bug
- shell脚本学习(二)
- [ACM] hdu 2067 小兔的棋盘(卡特兰数Catalan)
- 递归系列-----------八皇后解法
- 四月五号
- php中提示Undefined index的解决方法
- c语言字符类别测试库函数#include<ctype.h>
- [ACM] hdu 2067 小兔的棋盘(卡特兰数Catalan)
- [ACM] hdu 2067 小兔的棋盘(卡特兰数Catalan)