两个鸡蛋问题——Google面试题


题目:两个软硬程度一样的鸡蛋,不过可能都在一楼就摔碎,也可能从一百层楼摔下来没事。现在有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。要求给出最坏情况下的最少测试次数。

参考文献是大牛给出的方法,感觉自己的思路不是这样想问题的,下面把我考虑的步骤记录下来。

 

1. 最笨的办法是什么(问题是否可解)?

从1楼逐层测试,第n层鸡蛋碎了,n减1就是安全落下的最高层。最少测试次数为100。

 

大概很多人都会想到二分法:先在50层试一下,碎了就从1层逐层测试;没碎就在75层试一下...,最坏情况最少测试次数约为50,为什么是约,因为没有仔细考虑,是否第一次应该是在51层试。

我也想到了二分法,不过与此同时,(应该是题意理解不准确,感觉有两个鸡蛋)我觉得应该是每隔一层试一下,就是说,在2、4、6...、98、100来试。

 

2. 提出一个办法,最坏的情况和最好的情况下,得出的次数差别是否很大(是否可以平衡)?

上面的方法最坏情况(99层或100层鸡蛋才会碎)要51次,最好情况(1层或2层鸡蛋就会碎)要2次。

可以看出差别很大。

3. 如果可以平衡,考虑将最好的情况恶化,看是否可以改善最坏的情况,使整体最优化。

结合以上的两种方法,发现一个是二分,另一个是50分,感觉应该是介于2和50之间的一种分发,设为x分

99层为最坏情况,次数为:f(x)=(100-x)/x + x

f'(x)=1-100/x2=0  =>  x=10

应该采用10分法。

4. 继续上面的思路,恶化好的情况,改善坏的情况,使整体最优化。

10分后,结果是 1-9 (10) 11-19 (20) 21-29 (30) 31-39 (40)... 91-99 (100)

第一个鸡蛋没碎就依次在括号中的层试试,如果碎了,就在前面的9个层用第二个鸡蛋试,结束。

我们发现第一组最坏情况是9层,需要10次,最后一组最坏情况是99层,需要19次,不平衡。

我们将括号中测试的层数向后移,增加前面组的试验次数,减少后面组的试验次数,最后达到平衡。

总的次数是10+11+...+19=145,平均次数应该是14和15,所以答案是15.

最后的一个可能的结果是:(为什么是可能,因为10组中只要有一半是14一半是15就可以)

1-13(14)15-26(27)28-38(39)40-49(50)51-59(60)61-69(70)71-78(79)80-86(87)88-93(94)95-00(100)

 

 参考文献:

http://www.cnblogs.com/Matrix_Yao/p/4793823.html

http://blog.csdn.net/TravelInHistory/article/details/1434098


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM