因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n + 1層。
這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。
方法二:二分查詢
當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔:如果碎了,那麼從第一層開始向上扔(因為就剩下這乙個了,不能取中間值了)....; 如果沒有碎,就在75層扔.....。 這樣貌似速度快了不少,但是如果這個瓶子恰好是49層碎呢,那麼就是在50層扔碎了一次,然後從第一層開始又扔了49次,一共花費了50次,這樣的結果還不過第一種方法:即開始就從第一層扔,這樣最後才49層。
所以,這種方法也是不可取的。
方法三:動態規劃
其實,對於這個問題,我們可以將之轉化為:如果給定2個雞蛋,n次拋雞蛋實驗,在最壞的情況下,可以保證測出多少層。
在這個問題中,我們需要注意的時可以保證測出多少層。 為了保證能夠在有限的n次測試中測出需要的層數,我們需要首先考慮最壞的情況,也就是第一次拋雞蛋蛋就碎了的情況;如果第一次就碎了,那麼我們為了測出樓層就只能從底層開始一層層往上拋了(因為如果不是這樣,比如我從碎了的下一層開始拋,那麼如果雞蛋也碎了,就說不清了)。
這樣,我們就確定了每次試驗雞蛋的起拋位置,那就是n層,因為在n層拋,即使碎掉了也可以保證在剩下的n - 1次試驗當中,讓雞蛋覆蓋這所有的n層樓,如果高於n這個數字就不可能了。
那麼,如果我們的第一次雞蛋沒有碎呢? 那麼這個問題就很自然的轉化為了:在最多n - 1次拋雞蛋的試驗中,可以保證測出多少層。 可以看出,這是乙個典型的動態規劃的問題。
從上面的推斷中,就已經可以看出14次,就可以測出105層了,所以100層也需要14次就可以測出來。
注意:可能有些同學即使大概理解,但是還不是能說清楚是否是最好情況還是最壞情況,那麼我們只需要拿出其中乙個例子來舉例說明就可以了。 比如2個雞蛋拋3次能否測出乙個6層高樓的臨街位置,我們可以這麼思考:3次機會,我們第一次從3樓開始拋,如果碎了,那麼剩下2個雞蛋,2次機會一定可以找到臨界位置,或者沒有臨界位置(即1層樓就會摔碎的情況); 如果3樓沒有摔碎,那麼就是說4/5/6三樓還有2個雞蛋,兩次機會,而實際上4/5/6可以看做1/2/3,那麼我們就拿2個雞蛋2次機會開始,第一次從2樓拋,如果碎了,那麼還有乙個雞蛋一次機會一定可以可以找到的;如果沒有碎,那麼還有2個雞蛋一次機會,也就可以測試3層是否會碎。所以,通過分析,2個雞蛋拋3次可以測出乙個6層樓高的臨界位置,那麼同樣,2個雞蛋14次機會也可以測出105層樓高的臨界位置,那麼100層也一定是可以的了。
扔雞蛋問題
因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n 1層。這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。方法二 二分查詢 當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔 如果碎了,那麼從第一層...
扔雞蛋問題
標籤 演算法 初始問題 在100層樓裡,給定2個雞蛋,在安全樓層以上的樓扔雞蛋會碎。設計一種方案,測試哪層樓是最高安全樓層,要求測試次數最少。思路 這是典型的動態規劃問題。假設 f n 表示從 n 層樓找到摔雞蛋不碎安全樓層的最少判斷次數。假設第乙個雞蛋第一次從第 i 層扔下,如果碎了,說明安全樓層...
樓層扔雞蛋問題
有限層數和蛋數,求即使最壞情況下需要的最少判斷次數 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。參見 兩個雞蛋 一道google面試題 這是典型的動態規劃問題。假設f...