100層高的大樓,丟玻璃球的問題

無意間看到這個題目,想了很久纔想通(IQ偏低),而且網上很多文章的描述得不是很清楚,在此分享一下個人看法,隨便記錄一下,如有不對的對方,歡迎指正,謝謝!


問題:有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾層?


1、在這裏我們先忽略最優策略的解決方案

(1)最簡單的辦法就是從底層(1L)逐層往上(100L)嘗試,最多要99次才能確定破碎樓層(即100L破碎)。

(2)針對(1)的方案改進一下,第一個球用折半嘗試,第二個球用逐層嘗試,最多要50次才能確定破碎樓層(即50L破碎)。

(3)考慮對100L層樓分成N段(N=100的平方根,即10段、每段10L),用第一個球來確認球在哪個段破碎,然後用第二個球在該樓層段逐層嘗試,最多要19次才能確定破碎樓層(N+9)


2、最優策略的解決方案

爲了使最壞情況的投擲數最小,我們希望無論臨界段在哪裏,總的投擲數都不變,也就是說投擲數均勻分佈。

這裏可以看成是針對(3)的優化方案。

第一步:確定臨界段(初步確認破碎樓層範圍)

第二步:確定臨界層(逐層嘗試破碎樓層)

描述:爲了使投擲數均勻分佈(假設最多投擲N次),所以

臨界段標號 1 2 3 ... i
臨界層層數L N N-1 N-2 ... N-i+1
臨界段範圍D 1~N D1 + 1 ~  D1 + L2 D2 + 1 ~  D2 + L3 ... Di-1 + 1 ~ Di-1 + Li
最多投擲次數 N N N N N


由於N取值範圍(1~N),所以

當N等於1時,確認臨界段最多需要C1次(即1次);

當N等於2時,確認臨界段最多需要C2次(即2次);

......

當N等於N-1時,確認臨界段最多需要Cn-1次(即N-1次);

當N等於N時,確認臨界段最多需要Cn次(即N次);

所以

C1+C2+C3+...+Cn >= 100

=>  1+2+3+...+N >= 100

=>  N(N+1)/2 >= 100 (因爲N是正整數)

=> N >= 14

=> N=14

臨界段標號 1 2 3 ... i
臨界層層數L 14 13 12 ... N-i+1
臨界段範圍D 1~14 15~14+13 28~27+12 ... Di-1 + 1 ~ Di-1 + 1 + Li-1
最多投擲次數 14 14 14 14 14

比如39層,玻璃碎了:

用第一個球依次從14層、27層、39層拋下(39層碎了,共3次)

用第二個球依次從28層、29層、30層、31層、32層、33層、34層、35層、36層、37層、38層拋下(因爲27層沒碎,共11次)

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