google玻璃球
?? ?有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那么怎么利用手中的兩個球,用什么最優策略知道這個臨界的層是第幾層??
解題思路:
? ? 假如只有一個球,那很顯然,只有一個辦法:從第一層開始投,如果沒碎再試第二層、第三層.....
? ? 現在有兩個球,我們應該利用第一個球縮小臨界樓層所在的樓層范圍,可能會想到第一個球先從50層開始投,如果碎了,再用最后一個球從第一層開始投,最多到49樓肯定可以找到臨界樓層,如果沒碎那就說明臨界樓層在50-100中,此時繼續嘗試75樓....
? ? 可惜,上面的方法并非是最好的。因為最壞情況的投擲次數分布不均勻。比如,如果50樓碎了,此時最壞情況下需要嘗試50次,如果50樓沒碎,而75層不管是否碎了,最壞情況也只需要嘗試25次,也就是說,50樓投擲結果不同,所需最壞情況下的次數也不同,這就是分布不均勻的意思,那是否有辦法讓其分布均勻,也就是說假如在f層投,不管碎還是不碎,繼續時最壞情況所需次數也是一樣的。這樣才能使最壞情況下所需投擲次數達到最小。
? ? 假設一開始從第k層投,如果壞了,那么第二個球可以在剩下的k-1層一定能用k-1次確定哪層壞,再加上第k層的那次,所以總共k次。如果第k層沒有壞,那么第一個球在第k層的基礎上再加k-1層(注意不是k層,原因見后面),所以第二次從2k-1層投下,在k,k+1,k+2,……,2k-2,2k-1中則有k-2層,所以用k-2次才能找出,再加上原來的那兩次,還是共用了k次(為了保持總共還是k次,所以上面只能加k-1層)
? ? 依次類推.....
? ? 在第2k-1層基礎上再加k-2層,在第3k-3層基礎上再加k-3層,……,依次類推,一定能加到在第某層的基礎上再加2層,最后再原來的基礎上面還能再加1層,到目前為止,設為第n-1層,如果第n-1層壞了,那么就是第n-1層,如果沒有壞,根據已知題說某一層能摔碎球,那么在第n-1層上面有且僅還有一層就是剛摔壞的層(此時不需要實際投,而是直接推理得出),這時用的次數還是k次(最不理想的結果),所以k次能測最多n層,由上面的解說,可知n-1=k+(k+1)+(k+2)+(k+3)+……+2+1=k(k+1)/2,得n=k(k+1)/2+1,由上面可知n=100(層),k次最多能推測k(k+1)/2+1(層),所以k(k+1)/2+1≥100,得k(k+1)≥198,且k的最小整數為14,所以最多14次就能找出題目中的那層。 ?
補充:由上得知,第一次在14層投,第二次在第27層投,則依次為14 27 39 50 60 69 77 84 90 95 99。還能得出14次最多能測得到106樓,只不過題目中給了100樓,如果是107樓,那么就需要15次了
總結