題目原文:
Suppose that you have an n-story building (with floors 1 through n) and plenty of eggs. An egg breaks if it is dropped from floor T or higher and does not break otherwise. Your goal is to devise a strategy to determine the value of T given the following limitations on the number of eggs and tosses:
- Version 0: 1 egg, ≤T tosses.
- Version 1: ∼1lgn eggs and ∼1lgn tosses.
- Version 2: ∼lgT eggs and ∼2lgT tosses.
- Version 3: 2 eggs and ∼2$ \sqrt{n} $ tosses.
- Version 4: 2 eggs and ≤c$ \sqrt{T} $ tosses for some fixed constant c
分析:
version0 : 拿着一個雞蛋從1~n依次扔就可以,到floor T會碎,故復雜度為≤T
version 1: 采用二分查找,首先從n/2層開始扔:
if(雞蛋碎) 從(n/2)/2層開始扔;
else 從n/2+(n/2)/2層開始扔
二分方法需要lgn個雞蛋嘗試lgn次
version 2: 依次從1, 2, 4, 8, 16, 32,...2k開始扔,如果雞蛋在2k碎了,那么2k-1≤T≤2k,這時已經使用了 lgT 次步,接下來在[2k-1+1,2k)區間進行version1的二分查找方法,需要花費lgT步。這兩種操作加起來總共花費2lgT步
version 3: 將0~n層樓分成[1, $ \sqrt{n} $-1], [$ \sqrt{n} $, 2 $ \sqrt{n} $-1], [2$ \sqrt{n} $,3 $ \sqrt{n} $-1]...[k$ \sqrt{n} $, (k+1)$ \sqrt{n} $-1]..個區間,用一個雞蛋分布從1開始在各個區間的起始樓層扔,如果在k$ \sqrt{n} $層碎了,那就從(k-1)$ \sqrt{n} $+1開始逐層扔。第一步區間選擇用了 $ \sqrt{n} $的復雜度,第二步區間內部扔雞蛋用了 $ \sqrt{n} $的復雜度,總共用了 2$ \sqrt{n} $
version 4: 嘗試從1, 4, 9, 16, 25,...(k-1)2, k2....樓層扔雞蛋,加入雞蛋在樓層k2碎了,意味着(k-1)2≤T≤k2,這一步嘗試了$ \sqrt{T} $次(k=$ \sqrt{T} $)。接着從樓層(k-1)2+1開始逐層扔,最多嘗試至k2-1結束,這一步需要嘗試k2-1-(k-1)2-1=2$ \sqrt{T} $-1=2$ \sqrt{T} $-2次。總共用了3$ \sqrt{T} $-2次