兩個雞蛋問題——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