楼层扔鸡蛋问题

==有限层数和蛋数,求即使最坏情况下需要的最少判断次数==
两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见[两个鸡蛋--一道Google面试题])

这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第i层扔下,如果碎了,就剩一个鸡蛋,为确定下面楼层中的安全位置,必须从第一层挨着试,还需要i-1次;如果不碎的话,上面还有n-i层,剩下两个鸡蛋,还需要f[n-i]次(子问题,实体n层楼的上n-i层需要的最少判断次数和实体n-i层楼需要的最少判断次数其实是一样的)。因此,最坏情况下还需要判断max(i-1,f[n-i])次。


状态转移方程:f[n] = min{ 1+max(i-1,f[n-i]) | i=1..n }
初始条件: f[0]=0(或f[1]=1)

 

实际上,两个鸡蛋的情况用数学方程就可以解决,前提是你知道该怎么扔:
一种想法是第一个鸡蛋折半搜索,如100层的楼,先从50层扔下去,如果碎了则第二个鸡蛋在1~49层楼中自底向上线性搜索;如果没碎则第一个鸡蛋再从75层扔。如果这次碎了则第二个鸡蛋在51~74层楼中自底向上线性搜索;如果还没碎则第一个鸡蛋再从88层扔,依此类推。这种方法不是最优,因为最坏情况下安全位置恰好是49层,需要尝试50次。
正确的方法是先假设最少判断次数为x,则第一个鸡蛋第一次从第x层扔(不管碎没碎,还有x-1次尝试机会)。如果碎了,则第二个鸡蛋在1~x-1层中线性搜索,最多x-1次;如果没碎,则第一个鸡蛋第二次从x+(x-1)层扔(现在还剩x-2次尝试机会)。如果这次碎了,则第二个鸡蛋在x+1~x+(x-1)-1层中线性搜索,最多x-2次;如果还没碎第一个鸡蛋再从x+(x-1)+(x-2)层扔,依此类推。x次尝试所能确定的最高楼层数为x+(x-1)+(x-2)+...+1=x(x+1)/2。
比如100层的楼,只要让x(x+1)/2>=100,得x>=14,最少判断14次。具体地说,100层的楼,第一次从14层开始扔。碎了好说,从第1层开始试。不碎的话还有13次机会,再从14+13=27层开始扔。依此类推,各次尝试的楼层依次为


14
27 = 14 + 13
39 = 27 + 12
...
99 = 95 + 4
100

 

现在推广成n层楼,m个鸡蛋:
还是动态规划。假设f[n,m]表示n层楼、m个鸡蛋时找到摔鸡蛋不碎的最少判断次数。则一个鸡蛋从第i层扔下,如果碎了,还剩m-1个鸡蛋,为确定下面楼层中的安全位置,还需要f[i-1,m-1]次(子问题);不碎的话,上面还有n-i层,还需要f[n-i,m]次(子问题,实体n层楼的上n-i层需要的最少判断次数和实体n-i层楼需要的最少判断次数其实是一样的)。


状态转移方程:f[n,m] = min{ 1+max(f[i-1,m-1], f[n-i,m]) | i=1..n }
初始条件:f[i,0]=0(或f[i,1]=i),对所有i

 

时间: 2024-08-03 04:04:12

楼层扔鸡蛋问题的相关文章

《达人秀》北京赛区启动“鸡蛋男”现身(组图)

肚皮舞黑衣人美女模特背上切豆腐搞笑老大爷 新浪娱乐讯 东方卫视<中国达人秀>昨日(30日)举行了北京赛区的启动路演,现场有多位已经报名参赛的选手登台表演才艺,农民"苏珊大哥".京城"刀客".中国维塔斯."摇滚小胖"等特色选手受到全场关注,而此前曾扬言要到现场"督战"的"鸡蛋男",在路演过程中突然现身,但这回他并未采取"砸蛋"行为,而是在现场进行了一次类似"快闪"的行为艺术,重

Sql server存储过程和C#分页类简化你的代码

server|sql|存储过程|分页 Sqlserver存储过程和C#分页类简化你的代码! 在最近的项目中,由于要用到自定义分页的功能,本人就在网上找了个存储过程.结合C#写了个分页类.由于本人第一次写文章.写得不好,大家不要扔鸡蛋.. 下面是存储过程(sqlserver2000下通过) --最通用的分页存储过程 -- 获取指定页的数据   CREATE PROCEDURE Pagination   @tblName   varchar(255),       -- 表名   @strGetFi

Java 实现连接sql server 2000(JDBC数据库访问例子)

server|访问|数据|数据库 刘金龙 04041222 ljlsunny@vip.sina.com   第一种:通过ODBC连接数据库 JAVA语言的跨平台的工作能力(Write Once ,Run Anywhere).优秀的图像处理能力(我相信现在没有那种语言可以超过JAVA在网络上的图形处理能力).网络通信功能.通过JDBC数据库访问技术等等,让我们谁都不可否认JAVA语言是SUN公司对于计算机界的一个巨大的贡献.笔者可以描述这样一个场景:有一天你上网完全可以不用IE 或者NETSCAP

个人站长?博客写手?未来谁是主宰?

博客|站长 在当今的中国,已经不再是原先的网络时代了,不会再出现那种泡沫经济,我感觉我们的网络正在逐步的走上正轨.既然如此那就来谈谈 我们今天的主题吧!个人站长与博客写手在未来哪个更好?哪个更能赚钱? 1.对于流量来说 不管是博客还是网站,都是最重要的!没有了流量,也就失去了存在的意义!如果没有了流量,写博客的不如写笔记,开网站的不如在画纸上,写写画画自己的设想! 个人站长也都知道流量的重要性~ 在自己的网站建设好了以后,我们最重要的就是做我们自己的网站推广,如果你的网站再好!再有好的东西!如果

如何快速找到ASP的错误

错误 今天看了网络上关于如何<在Windows 2003下面使用调试ASP程序的常见错误以及解决方案(一)>一文,看了不错!我也写程序,各种程序都有写,C++.VB最近在使用Delphi进行开发,我也算小小程序员!对于开发ASP,我现在不像初学ASP那样,所写的代码也不像以前那样!我对于网站开发的安全性也在考虑了很多,也看了很多的书,网络上的文章,感觉有点治标不治本 看了刚才的那么多,感觉我这个人废话还真多哦!不要给我扔鸡蛋哦!鲜花送过来哦!好了,转正题吧! 对于ASP,一个错误我可以在三分钟

Fireworks制作动态banner流程

动态 itgao老总是我朋友,前几天要我帮忙做个banner,拖到今天终于有点不好意思了,动手!好久没有用fw做动画了,有些生疏.有不合适的地方希望大家不要扔鸡蛋砸我,要扔就扔石头,一把砸死我得了,我这人脸皮薄,呼呼.好,废话不多说,咱们开始吧:效果图: 本文涉及知识点:1.fw创建gif动画的基本过程:2.fw帧动画中共享层的使用:3.fw形状渐变动画的制作:4.fw缩放动画的制作:5.fw帧帧动画的制作:...第一步:做背景层大家知道,大多动画的背景图片都是固定的,变化的只是动画里的文字阿.

开米尼:站长 请与伪原创工具告别

今天在SEO论坛,有人说 伪原创即将覆灭,高质量网站的春天即将到来,开米尼是非常赞同这个观点的.但是这里的伪原创后面要加两个字,那就是工具,开米尼认为伪原创工具即将被淘汰.在这里发表这个观点也许有许多人会喷口水,扔鸡蛋,甚至许多伪原创工具的作者会对笔者进行口诛笔伐,但是今天开米尼必须要站出来说,伪原创工具时代已经过去. 为什么伪原创工具会被淘汰 1.搜索引擎原理决定.我们大致可以了解现在的伪原创工具的原理:同义字替换,段落打断,插入关键词,插入锚文本,加页头页脚,文章混编,无非就这些方式,那么根

风筝工作室浅析谷歌本次短期内PR 大更新

  8月5日凌晨 打开站长工具统计数据不经意的发现自己的几个小站的PR竟然都有变动,于是心中就有些絮叨想吐吐;这次更新的时间间隔这么短,真的让人有始料不及的感觉;本身自己打算在最近几天好好的调理下外链和友链呢,记过还没有操作就更新了;有点心不甘.几个小站都有相应的变化:郑州欧华上线两个多月来 一直在推进和调整,快照和收录也基本稳定 本次PR有0变为了2;哈尔滨欧华上线不到两个月 一切都还好 本次PR有0变为3 南京欧华经历了一次大的调整所以变化基本不大 有2变为3 . 朋友圈中也有人说 PR升了

一个新网站优化过程分享与探讨

最近我建了一个新站,我思索了很长时间应该怎样下手,我想在起跑线上跑对方向,在论坛上看了很多达人的经验之谈,我个人总结了下,一个网站要成功一个最基本的条件就是要抓准一个主题,围绕主题展开优化,好比读书时写作文,要有一个中心主题,你才能展开发挥.我先定位好了网页的框架结构,通过关键词工具找出了四个与主题相关的主要关键词.然后通过GOOGLE工具查询找出100个有搜索量中下竞争程度的长尾词,本人时间精力有限,只定位在100个跟网站主题相关感觉不错的长尾词,在首页我锁定了两个主关键词进行优化,长尾词我优