100层楼有一个鸡蛋,如果确定刚好摔碎的那个楼层,最坏情况下最少需要摔多少次?

问题:

一种石头,在某一高度扔下就会碎,在这个高度以下不会碎,高度以上一定碎。现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。
 

分析:

这道题我们应反过来考虑,就是用a块石头扔b次至多一定可分辨层数X(a,b)。

先从最简装的一块石头考虑,很显然,
X(1,1) = 1
X(1,2) = 2
X(1,3) = 3
.
X(1,i) = i

再考虑二块石头,显而易见
X(2,1) = 1

对于X(2,2),我们可这样考虑,当我们扔第一次后,有两种可能:破和不破.

如果石头破了,则

1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩1次机会.
即我们还可分辨下面的 X(1,1) 层.

如果石头没破,则

1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩1次机会.
即我们还可分辨上面的 X(2,1) 层.

我们知道,X(1,1) = 1.所以我们第一次从第二层开始扔,如果石头破了,则再测试第一层.如果没破则再测试第三层.
所以用2块石头扔2次至多一定可分辨
1 + X(1,1) + X(2,1) = 1 + 1 + 1 = 3 层.

不失一般性,我们考虑
X(2,i)

对X(2,i),我们这样考虑,当我们扔第一次后,有两种可能:破和不破.

如果石头破了,则

1,我们还剩1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨下面的 X(1,i-1) 层.

如果石头没破,则

1,我们还剩2块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i-1次机会.
即我们还可分辨上面的 X(2,i-1) 层.


X(2,i) = 1 + X(1,i-1) + X(2,i-1)

接下来我们考虑
X(i1,i2)

同样,对 X(i1,i2),我们还是这样考虑,当我们扔第一次后,有两种可能:破和不破.

如果石头破了,则
1,我们还剩i1-1块石头.
2,我们下一次只需检查下面的楼层.
3,我们还剩i2-1次机会.

如果石头没破,则
1,我们还剩i1块石头.
2,我们下一次只需检查上面的楼层.
3,我们还剩i2-1次机会.


X(i1,i2) = 1 + X(i1-1,i2-1) + X(i1,i2-1)

很明显
无论你有几块石头,扔一次只能测试一层.


X(i,1) = 1.

 

这样,我们可制出如下表:

扔的次数: 1 2 3 04 05 06 007 008 009 010 011 012 013
分辨层数:
一块石头: 1 2 3 04 05 06 007 008 009 010 011 012 013
二块石头: 1 3 6 10 15 21 028 036 045 055 066 078 091
三块石头: 1 3 7 14 25 41 063 092 129 175 231 298 377
四块石头: 1 3 7 15 30 56 098 162 255 385 561 793 1092
五块石头: 1 3 7 15 31 62 119 218 381 637 1023
六块石头: 1 3 7 15 31 63 126 246 465 847 1485

也就是说用4块石头扔12次至多一定可分辨793层,扔13次至多一定可分辨1092层.

 

答案:

1000层的楼房,

用4块石头,扔13次一定可测试出来.


转载声明:本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kittyjie/archive/2009/10/27/4732415.aspx

假设我们每选择从第x层楼往下扔球,如果球碎了,我们就知道楼高一定在1到x-1层之间,否则楼高一定在x+1到100层之间。因此,我们可以将这个问题转化为在1到100之间找到一个数字x,使得最坏情况需要尽可能少的尝试数。 首先,我们可以选择在第14层楼往下扔球,如果球没碎,我们再选择在第27层楼往下扔球,如果球还没碎,我们再选择在第39层楼往下扔球……一直到在第96层楼往下扔球。这样一来,如果球一直没碎,我们最多只需要尝试14;如果球在某一层楼碎了,我们最多只需要尝试13。 但是,这种方法并不是最优解。我们可以使用二分法来优化。具体做法如下: 1. 我们首先选择在50层楼往下扔球,如果球碎了,我们就知道楼高一定在1到49层之间,如果球没碎,我们就知道楼高一定在51到100层之间。 2. 然后,我们选择在25层楼或75层楼往下扔球,具体选择哪一层楼取决于第一的结果。如果第一球没碎,我们就在51到75层之间继续尝试;如果第一球碎了,我们就在1到24层之间继续尝试。 3. 然后,我们选择在13层楼或38层楼或63层楼或88层楼往下扔球,具体选择哪一层楼取决于前两的结果。如果前两球都没碎,我们就在76到100层之间继续尝试;如果前两球都碎了,我们就在1到12层之间继续尝试;如果第一球没碎,第二球碎了,我们就在51到62层之间继续尝试;如果第一球碎了,第二球没碎,我们就在1到24层之间继续尝试。 4. 以此类推,每都选择中间层数的一半作为尝试的楼层,直到我们找到了恰好摔碎楼层。 使用二分法,最坏情况下我们只需要尝试7就能找到恰好摔碎楼层。因此,使用二分法的方法是最优解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值