算法--Google的楼层扔鸡蛋问题

算法-Google的楼层扔鸡蛋问题


扔鸡蛋问题其实在网上已经在网上有很多答案了,有的使用迭代法,有的根据递归和的方法.对于可接受的方法来说递归和的方法无疑是可以做的有效的计算的方法,迭代法随便给个值以后简直可以认为无解.但是大部分人给出递归和的同时往往缺少一个严谨的证明,从而导致整个方法所依赖的理论是不成立的.迭代法就不多说了,网上的文章一搜一大把.今天着重说下通过递归和方法的证明.

先看题目

一幢 100 层的大楼,给你两个鸡蛋. 如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从前 n-1 层扔鸡蛋都不碎.
这两只鸡蛋一模一样,不碎的话可以扔无数次. 已知鸡蛋在0层扔不会碎.
提出一个策略, 要保证能测出鸡蛋恰好不会碎的楼层, 并使此策略在最坏情况下所扔次数最少.

问题很简单:就是找出最好的楼层选择策略.这个策略可以使任意情况的尝试次数都可以维持在一个最低的值X以下,也就是说X是这个策略的尝试次数的最大值.

递归和的方法大部分给出的都是如下一个方法.
假设开始的楼层就是最优策略下的尝试次数的最大值X层.
如果第一次破了就是1+X-1次,符合题意
如果没破就是找剩下的部分X+1到100层中的值,但是已经用了一次了所以剩下的是从X+X-1层开始
等等以此类推知道楼顶第一个鸡蛋还是没破的情况
至于X的值则可以有一下方式计算可得
X+(X-1)+(X-2)…+1 >= 100
解的x约等于13点多… 大概就是14吧.
等等 网上大多是这个方法.
但是这个方法有个重要的前提就是
无论是在X-1层开始X+1开始 最后得到的解果总会有一种情况使得最大次数大于了X次.
这个如何证明呢
首先X+1好证明:中间层X就行,这样的得出来的最坏次数就是X+1>X所以X+1层开始是不对的.
其次是X-1层开始尝试根据策略
X-1+X-2+X-3…+1 = 100
得到X等于14多一点.X为15.
这种情况下15是最小值.而如果在X开始呢14则是最小值,所以证明存在楼层是X的值小于X-1层的情况.所有应该从X层开始是最优解.

这里只给出了递归和方法的依据证明.至于本问题的详细解题过程,大家可以百度其他人的文章.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值