題目:兩個軟硬程度一樣的雞蛋,不過可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。現在有座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