1. 程式人生 > >Google面試題之經典雞蛋問題

Google面試題之經典雞蛋問題

  • 還是有些暈。。。

    Q: 只給你二個雞蛋,你能上100層樓,你想知道雞蛋的硬度。雞蛋可能很硬或很脆弱,如果雞蛋從第m層掉下而沒破裂,而從第m+1層掉下就破裂了,那麼這個雞蛋的硬度就是m。你需要找出這個m和在最壞情況下最少試驗次數。(經典雞蛋問題)

    A: 計算機學生可能會首先用第一個雞蛋做二分搜尋(O(logN))再用第二個遞增做線性搜尋(O(N)),最後必將用線性搜尋結束因為用第二個雞蛋時你無法確定最高一層。因此,問題變為如何使用第一個雞蛋來減少線性搜尋。

    於是如果第一個蛋破裂在最高點我們要扔x-1次並且我們必須從x層高扔第一個蛋。現在如果第一個蛋的第一次扔沒有破裂,如果第一個蛋在第二次扔破了我們要扔x-2次第二個蛋。假如16是答案,我需要扔16次才能找到答案。來驗證一下是否可以從16層開始扔,首先從16層扔如果它破裂了,我們嘗試所有其下的樓層從1到15;如果沒破我們還能扔15次,於是我們將從32層(16+15+1)再扔。原因是如果它在32層破裂我們能嘗試其下所有樓層從17到31最壞扔第二個蛋14次(總共能扔16次了)。如果32層並沒破,我們還剩下能扔13次,依此類推得:

    1 + 15 16 如果它在16層破裂,從1到15層最壞扔15次第二個蛋

    1 + 14 31 如果它在31層破裂,從17到30層最壞扔14次第二個蛋

    1 + 13 45.....

    1 + 12 58

    1 + 11 70

    1 + 10 81

    1 + 9  91

    1 + 8  100 在最後我們能輕易地做到因為我們有足夠多扔的次數來完成任務

    從上表我們能看到最佳的一個在最後一步將需要0次線性搜尋。

    能把上述規律寫為: (1+p) + (1+(p-1))+ (1+(p-2)) + .........+ (1+0) >= 100.

    令1+p=q上述式子變為q(q+1)/2>=100,對100解答得到q=14。

    扔第一個蛋從層14,27,39,50,60,69,77,84,90,95,99,100直到它破裂,再開始扔第二個蛋。最壞情況只需14次。

    附:待看

    有幾百億的整數,分佈的儲存到幾百臺通過網路連線的計算機上,你能否開發出一個演算法和系統,找出這幾百億資料的中值?就是在一組排序好的資料中居於中間的數。顯然,一臺機器是裝不下所有的資料。也儘量少用網路頻寬。

    http://matpalm.com/median/index.html