百层高塔扔鸡蛋问题新思路

百层高塔扔鸡蛋问题新思路

题目

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。 最少需要几次测试,才能得到摔碎鸡蛋的楼层?方案如何?

原文链接:http://blog.sina.com.cn/s/blog_6c813dbd0101bh98.html

本文的思路为原创,思路与原文思路完全不同,如有发现讲解有问题,请留言指出,谢谢~

问题解析

这是一个不确定问题的分析,既然是不确定,那么我们只能考虑最差的情况,只要保障证最差情况下能完成任务,那么问题就得到了解决。我说这句话什么意思呢?举个例子:

假如我们第一次测试把鸡蛋在50层扔下时鸡蛋破了;那么此时我们只剩下一个鸡蛋,这个时候,为了保证我们一定能够测出鸡蛋刚好在哪一层能破,我们只能从第一层,一层一层网上尝试。最坏的情况就是鸡蛋刚刚好在49层摔破,这时候我们一共尝试了50次。这就是这种情况下最坏的情况了。假如没有破,那么问题就 转化成了重新尝试100-50层的问题了。依次类推。

所以我们假设在最少需要测试的次数时,第一次选的楼层是k(1<=k<=100)层,那么此时有两种结果:

1:鸡蛋没破碎

2:鸡蛋碎了

此时我们可以用如下图表示:

在这里插入图片描述

假如鸡蛋破了,我们需要一层一层的尝试,总共需要尝试k次:

在这里插入图片描述

假如鸡蛋没破,问题就转换成了最初的问题了,只不过楼层由100层减少到了100-k层,递归进行下去:

在这里插入图片描述

一次递归下去,知道还剩下1层楼:

在这里插入图片描述

我们可以看出,这是一颗二叉树,每一个节点就是我们尝试扔的楼层,树的深度,就是我们需要尝试的次数,而这颗树的总节点数,就是最大楼层数。

观察这棵树的特点,每一层的节点数都比上一层的节点数多一个,并且这一层的节点数和当前层数相等。所以为什么保证在任何最坏的情况下,我们都能在比较少的次数中尝试出最佳扔鸡蛋的楼层,我们要保证树的每一个分支的深度都尽可能的浅,也就是让这棵树的深度尽可能的浅。我们设当前树的最大深度为n,所以可以得出:1+2+3+...+n>=100,即(1+n)*n/2>=100。得到n的最小值为14。

所以我们至少需要尝试14次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值