百層高塔扔雞蛋問題新思路

百層高塔扔雞蛋問題新思路

題目

兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。 最少需要幾次測試,才能得到摔碎雞蛋的樓層?方案如何?

原文鏈接:http://blog.sina.com.cn/s/blog_6c813dbd0101bh98.html

本文的思路爲原創,思路與原文思路完全不同,如有發現講解有問題,請留言指出,謝謝~

問題解析

這是一個不確定問題的分析,既然是不確定,那麼我們只能考慮最差的情況,只要保障證最差情況下能完成任務,那麼問題就得到了解決。我說這句話什麼意思呢?舉個例子:

假如我們第一次測試把雞蛋在50層扔下時雞蛋破了;那麼此時我們只剩下一個雞蛋,這個時候,爲了保證我們一定能夠測出雞蛋剛好在哪一層能破,我們只能從第一層,一層一層網上嘗試。最壞的情況就是雞蛋剛剛好在49層摔破,這時候我們一共嘗試了50次。這就是這種情況下最壞的情況了。假如沒有破,那麼問題就 轉化成了重新嘗試100-50層的問題了。依次類推。

所以我們假設在最少需要測試的次數時,第一次選的樓層是k(1<=k<=100)層,那麼此時有兩種結果:

1:雞蛋沒破碎

2:雞蛋碎了

此時我們可以用如下圖表示:

在這裏插入圖片描述

假如雞蛋破了,我們需要一層一層的嘗試,總共需要嘗試k次:

在這裏插入圖片描述

假如雞蛋沒破,問題就轉換成了最初的問題了,只不過樓層由100層減少到了100-k層,遞歸進行下去:

在這裏插入圖片描述

一次遞歸下去,知道還剩下1層樓:

在這裏插入圖片描述

我們可以看出,這是一顆二叉樹,每一個節點就是我們嘗試扔的樓層,樹的深度,就是我們需要嘗試的次數,而這顆樹的總節點數,就是最大樓層數。

觀察這棵樹的特點,每一層的節點數都比上一層的節點數多一個,並且這一層的節點數和當前層數相等。所以爲什麼保證在任何最壞的情況下,我們都能在比較少的次數中嘗試出最佳扔雞蛋的樓層,我們要保證樹的每一個分支的深度都儘可能的淺,也就是讓這棵樹的深度儘可能的淺。我們設當前樹的最大深度爲n,所以可以得出:1+2+3+...+n>=100,即(1+n)*n/2>=100。得到n的最小值爲14。

所以我們至少需要嘗試14次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章