摔蛋问题

来源:互联网 发布:阳春市网络问政平台 编辑:程序博客网 时间: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)

原创粉丝点击