摔蛋问题

问题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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值