動態(tài)規(guī)劃問題-怎么扔雞蛋

在網(wǎng)上查資料的時候無意間看到了這道谷歌面試題,據(jù)說這道面試題刷了好多的大牛(可怕)杉武。讀了幾篇文章,讀懂以后感覺這種解決問題的思路和方法實在是太巧妙了艺智,佩服!在最壞的情況下仍要保證付出最小的代價封拧,這種思想非常值得讓人去學習和借鑒泽西,所以寫一篇博客記錄一下自己對這道題的理解。

題目

一幢 200 層的大樓捧杉,給你兩個雞蛋味抖,如果在第 n 層扔下雞蛋仔涩,雞蛋不碎粘舟,那么從第 n-1 層扔雞蛋,都不碎霞揉。這兩只雞蛋一模一樣,不碎的話可以扔無數(shù)次适秩,且雞蛋在0層不會碎秽荞。設計一種策略能保證可以測出雞蛋恰好會碎的樓層岗宣,且如果該策略是最壞的情況所扔次數(shù)最少蚂会。

解決問題

思維分析

首先我們需要確定最壞情況是什么樣子的。
假設n是我們的決定第一次嘗試的樓層耗式,第一個雞蛋從n層開始扔胁住。

  1. 如果沒有壞趁猴,那么我們就可以從[n+1,100]這個區(qū)間扔雞蛋了,這個時候怎么扔就是我們需要考慮的策略彪见。
  2. 但是如果運氣比較背儡司,雞蛋壞了_!那么這個時候我們就只有一個雞蛋了,所以為了滿足我們要測出恰好會碎的樓層余指,我們只能從1樓一直扔到n-1樓捕犬。這個時候我們的最壞情況就是n次。

雞蛋沒有壞該怎么選擇第二次以及以后扔雞蛋的策略呢酵镜?
由于沒有碎碉碉,所以第n層對于我們而言和第0層是一樣一樣的,所以我們不能采用一層一層增加的方式扔雞蛋淮韭!因為有兩個雞蛋靠粪,比較任性昔善。下面提出幾個合理的假設,然后分析:

  1. 增加n層:碎了的話袖订,最壞情況就是我們還要扔2n-n-1+2=n+1次,這個時候最壞情況比第一次還壞,而且照這個趨勢下去龄广,最壞情況只會越來越壞,是不可控的敲才,所以這種策略拋棄剃氧。
  2. 增加大于n層:和增加n層一樣,如果第一個雞蛋碎了那最壞情況就是越來越壞,且比增加n層更壞(可以自己做個簡單的算術推導一下)畦幢。
  3. 增加小于n層:隨著n的不斷減小,最壞情況下需要仍的次數(shù)恒定為n是不會變的(因為第一次就碎了吗氏,對于這種情況就是最壞情況)。那么我們需要考慮的是如何使扔的次數(shù)最少,想想看仿村,果斷取n-1,這樣既保證了快速找到剛好碎的樓層畏鼓,又保證了最壞情況扔的次數(shù)最少。
  4. 所以我們最后的策略是增加n-1層贵少。

以上就是一個分析過程滔灶,對于第三次,第四次....都可以遞歸的進行分析。
由于最好情況是第一個雞蛋一直扔到了100層表箭,而100層與n之間是有一個函數(shù)關系的崔拥,下面就可以列出一個等式:
n+(n-1)+(n-2)+...+1=100=n(n+1)/2
所以n約等于14
所以第一次從第十四層開始扔拆魏,最壞情況就是第一次就碎了贴膘,然后需要從1樓開始一層一層的扔垢揩,共扔14次。

編程解答

以上是分析然后數(shù)學解答,還有一種代碼做法撮奏,這里我就直接引用知乎大神的代碼了哈。
設f(n, m)為n層樓, m個蛋所需次數(shù), 那么它就成了一道DP題

import functools
def f(n, m):
    if n == 0:
        return 0
    if m == 1:
        return n

    ans = min([max([f(i - 1, m - 1), f(n - i, m)]) for i in range(1, n + 1)]) + 1
    return ans
print(f(100, 2))
print(f(200, 2))

知乎討論

扔雞蛋問題

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓢娜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褒颈,更是在濱河造成了極大的恐慌念秧,老刑警劉巖币狠,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件止吐,死亡現(xiàn)場離奇詭異碍扔,居然都是意外死亡,警方通過查閱死者的電腦和手機二拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門澜倦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷挥,“玉大人雏节,你說我怎么就攤上這事。” “怎么了埃元?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長类嗤。 經(jīng)常有香客問我黄伊,道長,這世上最難降的妖魔是什么斯撮? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮刻剥,結果婚禮上酗电,老公的妹妹穿的比我還像新娘。我一直安慰自己内列,他們只是感情好撵术,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著话瞧,像睡著了一般嫩与。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上交排,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天划滋,我揣著相機與錄音,去河邊找鬼埃篓。 笑死处坪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播同窘,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玄帕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了想邦?” 一聲冷哼從身側響起裤纹,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丧没,沒想到半個月后鹰椒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡呕童,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年漆际,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺饲。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡奸汇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钞支,到底是詐尸還是另有隱情茫蛹,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布烁挟,位于F島的核電站婴洼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撼嗓。R本人自食惡果不足惜柬采,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望且警。 院中可真熱鬧粉捻,春花似錦、人聲如沸斑芜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杏头。三九已至盈包,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醇王,已是汗流浹背呢燥。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寓娩,地道東北人叛氨。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓呼渣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寞埠。 傳聞我的和親對象是個殘疾皇子屁置,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 問題 有一棟100層的高樓,一個雞蛋從第N層及以上的樓層落下來會摔破畸裳, 在第N層以下的樓層落下不會摔破缰犁。給你2個雞...
    豆志昂揚閱讀 2,725評論 0 0
  • 問題 有一個n層的建筑淳地。如果一個雞蛋從第k層及以上落下怖糊,它會碎掉。如果從低于這一層的任意層落下颇象,都不會碎伍伤。 有m個...
    晉陽丶閱讀 1,610評論 0 0
  • Docker 1.13 發(fā)布已經(jīng)26天了,趁著今天想起系統(tǒng)密碼遣钳,更新了一下系統(tǒng)扰魂,順便體驗一下新版本的功能。 因為我...
    左藍閱讀 2,275評論 0 12
  • 蟲子渴望飛翔蕴茴, 只是沒有翅膀劝评, 如何駕馭風的力量。 它不甘心倦淀, 于是想自己編織自己的翅膀蒋畜, 用樹葉, 用毛發(fā)撞叽, 于...
    西湖泛舟客閱讀 226評論 0 0