簡單的扔雞蛋問題

2021-10-02 21:21:39 字數 966 閱讀 3669

有2個雞蛋,從100層樓上往下扔,以此來測試雞蛋的硬度。比如雞蛋在第9層沒有摔碎,

在第10層摔碎了,那麼雞蛋不會摔碎的臨界點就是9層。

問:如何用最少的嘗試次數,測試出雞蛋不會摔碎的臨界點?

那麼首先我們在樓層x扔出第乙個雞蛋,這個雞蛋都會有兩個狀態:

:碎了,此時還剩下乙個雞蛋,為了確保我們能夠得到正確的樓層,接下來我們只能從底層(這裡的底層是指還沒有確定的層數,如第一次沒碎,而第二次碎了,我們只需要從x+1層開始)一層一層往上扔,直到雞蛋碎了為止,最壞情況我們需要1+x-1次嘗試

:沒碎,此時我們仍然剩下兩個雞蛋,並且我們可以確保我們想要的樓層在該樓層x之上(即使我們得到了正確樓層但我們並不知道,仍需要在x+1層嘗試)。到這裡,我們可以發現我們得到了乙個子問題:用兩個雞蛋,在該樓層(向上)得到我們想要的樓層需要多少次?。我們用**f(floor)**表示在總層數floor下需要的最大嘗試次數,那麼沒碎情況下我們需要的嘗試次數為1+f(100-x)。顯而易見這是乙個遞迴方法。當兩種情況嘗試次數相同時或者最接近時,我們能夠得到最少的嘗試次數

那麼如何計算f呢?

3次機會時,我們能夠測試3+n(2)=6

此時我們能夠得到經驗式,有n次嘗試時,能夠測試**n+n(n-1)**的樓層

f(1

)=1;

f(2~

3=1+

2)=2

;f(4

~6=1

+2+3

)=3;

我們就可以得到答案f

(100)=

f(91~

105)

=14

扔雞蛋問題

因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n 1層。這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。方法二 二分查詢 當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔 如果碎了,那麼從第一層...

扔雞蛋問題

因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n 1層。這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。方法二 二分查詢 當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔 如果碎了,那麼從第一層...

扔雞蛋問題

標籤 演算法 初始問題 在100層樓裡,給定2個雞蛋,在安全樓層以上的樓扔雞蛋會碎。設計一種方案,測試哪層樓是最高安全樓層,要求測試次數最少。思路 這是典型的動態規劃問題。假設 f n 表示從 n 層樓找到摔雞蛋不碎安全樓層的最少判斷次數。假設第乙個雞蛋第一次從第 i 層扔下,如果碎了,說明安全樓層...