100层高的大楼,丢玻璃球的问题

无意间看到这个题目,想了很久才想通(IQ偏低),而且网上很多文章的描述得不是很清楚,在此分享一下个人看法,随便记录一下,如有不对的对方,欢迎指正,谢谢!


问题:有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?


1、在这里我们先忽略最优策略的解决方案

(1)最简单的办法就是从底层(1L)逐层往上(100L)尝试,最多要99次才能确定破碎楼层(即100L破碎)。

(2)针对(1)的方案改进一下,第一个球用折半尝试,第二个球用逐层尝试,最多要50次才能确定破碎楼层(即50L破碎)。

(3)考虑对100L层楼分成N段(N=100的平方根,即10段、每段10L),用第一个球来确认球在哪个段破碎,然后用第二个球在该楼层段逐层尝试,最多要19次才能确定破碎楼层(N+9)


2、最优策略的解决方案

为了使最坏情况的投掷数最小,我们希望无论临界段在哪里,总的投掷数都不变,也就是说投掷数均匀分布。

这里可以看成是针对(3)的优化方案。

第一步:确定临界段(初步确认破碎楼层范围)

第二步:确定临界层(逐层尝试破碎楼层)

描述:为了使投掷数均匀分布(假设最多投掷N次),所以

临界段标号123...i
临界层层数LNN-1N-2...N-i+1
临界段范围D1~ND1 + 1 ~  D1 + L2D2 + 1 ~  D2 + L3...Di-1 + 1 ~ Di-1 + Li
最多投掷次数NNNNN


由于N取值范围(1~N),所以

当N等于1时,确认临界段最多需要C1次(即1次);

当N等于2时,确认临界段最多需要C2次(即2次);

......

当N等于N-1时,确认临界段最多需要Cn-1次(即N-1次);

当N等于N时,确认临界段最多需要Cn次(即N次);

所以

C1+C2+C3+...+Cn >= 100

=>  1+2+3+...+N >= 100

=>  N(N+1)/2 >= 100 (因为N是正整数)

=> N >= 14

=> N=14

临界段标号123...i
临界层层数L141312...N-i+1
临界段范围D1~1415~14+1328~27+12...Di-1 + 1 ~ Di-1 + 1 + Li-1
最多投掷次数1414141414

比如39层,玻璃碎了:

用第一个球依次从14层、27层、39层抛下(39层碎了,共3次)

用第二个球依次从28层、29层、30层、31层、32层、33层、34层、35层、36层、37层、38层抛下(因为27层没碎,共11次)

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值