摔蛋问题
来源:互联网 发布:阳春市网络问政平台 编辑:程序博客网 时间:2024/05/17 05:18
问题1:100层楼有一个鸡蛋,如果确定刚好摔碎的那个楼层,最坏情况下最少需要摔多少次?
从1到100层依次摔,最坏要100次
问题2:如果有两个鸡蛋?
用分层的方法
我们要将100层楼分成多个区段
然后用第一个鸡蛋去确定区段
用第二个鸡蛋去确定区段中的位置
具体的做法是用按照14 13 12...1的楼层来摔
可以证明其是最优的
问题3:如果是3个鸡蛋?
继续用分层的方法,类似于建立多层索引的方法
但具体怎么分,可能就不是手算能得到结果的
问题4:如果有K个鸡蛋,且K小于7
当K>=7的时候,我们可以用二分法来做
并且可以证明理论最优值是7次
过程相当于二分查找建立的二叉树
100层楼都是叶子节点,所以树的高度floor(log100+1)=7
对于K<7的情况,我们可以用动态规划的方法来做
设有方程F(i,j)表示至多用i个鸡蛋,尝试j次在最坏情况下能确定的最高楼层M
那么F(i,1)=1 表示不管多少个鸡蛋,在尝试一次的情况最坏只能确定第一层楼
F(1,j)=j表示1个鸡蛋,在尝试j次的情况下最坏只能确定j层楼
首先我们假设用i-1个鸡蛋在尝试j-1次情况下能确定的最高楼层为m
那么现在我们将第一个鸡蛋从m层扔下,没碎
我们需要确定从m层开始的摔蛋最优方案
也就是i个鸡蛋尝试j次所能确定的最高楼层F(i,j-1)=m'
那么M=m+m'
所以有动态规划方程
F(i,j)=F(i-1,j-1)+F(i,j-1)
- 摔蛋问题
- 砸蛋问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题
- 问题???
- ImageMap的用法
- JavaScript初学者应注意的七个细节
- C++编程规范 组织和策略问题
- 解决iframe,frame和框架丢失或获取不到session,cookies问题
- 把调试信息打印到console的方法
- 摔蛋问题
- Java设计模式 - Factory(工厂模式)
- 2011-11-11 经典的mvc开发设计模式
- Android核心模块内容概述
- dump 控制文件
- 关于ForEach循环的var属性
- november
- 微软的HTC不执行带来的困扰
- python 数字