久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 樓層扔雞蛋問題 [打印本頁]

作者: 51黑tt    時間: 2016-3-5 19:59
標題: 樓層扔雞蛋問題
有限層數和蛋數,求即使最壞情況下需要的最少判斷次數兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建筑,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。(參見兩個雞蛋--一道Google面試題)
這是典型的動態規劃問題。假設f[n]表示從n層樓找到摔雞蛋不碎安全位置的最少判斷次數。假設第一個雞蛋第一次從第i層扔下,如果碎了,就剩一個雞蛋,為確定下面樓層中的安全位置,必須從第一層挨著試,還需要i-1次;如果不碎的話,上面還有n-i層,剩下兩個雞蛋,還需要f[n-i]次(子問題,實體n層樓的上n-i層需要的最少判斷次數和實體n-i層樓需要的最少判斷次數其實是一樣的)。因此,最壞情況下還需要判斷max(i-1,f[n-i])次。
狀態轉移方程:f[n] = min{ 1+max(i-1,f[n-i]) | i=1..n } 初始條件: f[0]=0(或f[1]=1)實際上,兩個雞蛋的情況用數學方程就可以解決,前提是你知道該怎么扔:
一種想法是第一個雞蛋折半搜索,如100層的樓,先從50層扔下去,如果碎了則第二個雞蛋在1~49層樓中自底向上線性搜索;如果沒碎則第一個雞蛋再從75層扔。如果這次碎了則第二個雞蛋在51~74層樓中自底向上線性搜索;如果還沒碎則第一個雞蛋再從88層扔,依此類推。這種方法不是最優,因為最壞情況下安全位置恰好是49層,需要嘗試50次。
正確的方法是先假設最少判斷次數為x,則第一個雞蛋第一次從第x層扔(不管碎沒碎,還有x-1次嘗試機會)。如果碎了,則第二個雞蛋在1~x-1層中線性搜索,最多x-1次;如果沒碎,則第一個雞蛋第二次從x+(x-1)層扔(現在還剩x-2次嘗試機會)。如果這次碎了,則第二個雞蛋在x+1~x+(x-1)-1層中線性搜索,最多x-2次;如果還沒碎第一個雞蛋再從x+(x-1)+(x-2)層扔,依此類推。x次嘗試所能確定的最高樓層數為x+(x-1)+(x-2)+...+1=x(x+1)/2。
比如100層的樓,只要讓x(x+1)/2>=100,得x>=14,最少判斷14次。具體地說,100層的樓,第一次從14層開始扔。碎了好說,從第1層開始試。不碎的話還有13次機會,再從14+13=27層開始扔。依此類推,各次嘗試的樓層依次為
1427 = 14 + 1339 = 27 + 12...99 = 95 + 4100現在推廣成n層樓,m個雞蛋:
還是動態規劃。假設f[n,m]表示n層樓、m個雞蛋時找到摔雞蛋不碎的最少判斷次數。則一個雞蛋從第i層扔下,如果碎了,還剩m-1個雞蛋,為確定下面樓層中的安全位置,還需要f[i-1,m-1]次(子問題);不碎的話,上面還有n-i層,還需要f[n-i,m]次(子問題,實體n層樓的上n-i層需要的最少判斷次數和實體n-i層樓需要的最少判斷次數其實是一樣的)。
狀態轉移方程:f[n,m] = min{ 1+max(f[i-1,m-1], f[n-i,m]) | i=1..n }初始條件:f[i,0]=0(或f[i,1]=i),對所有i





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久夜视频 | 人人干人人干人人 | 一区二区在线看 | 国产精品2区 | 国产不卡在线播放 | 一区二区三区精品在线视频 | 九九热精品视频在线观看 | 欧美亚洲免费 | 欧美在线色视频 | 婷婷在线免费 | 亚洲最大的黄色网址 | 中文字幕一级 | 久久久精品一区二区三区四季av | 超碰国产在线 | 91网在线观看 | 色av一区二区三区 | 国产精品爱久久久久久久 | 国产黄色小视频在线观看 | 亚洲三区在线播放 | 亚洲国产一区二区三区在线观看 | 亚洲视频一区二区三区 | 91超碰caoporn97人人 | 久久的色 | 一区二区三区小视频 | 久久久久九九九女人毛片 | 久草在线在线精品观看 | 国产一区二区三区久久久久久久久 | 天天干在线播放 | 成人深夜福利在线观看 | 在线观看国产 | 国产精品99999999 | 欧美成人精品 | 国产高清一区二区 | 亚洲一区二区三区四区五区午夜 | www.久久.com | 国产精品久久久久999 | 最新国产精品视频 | 国产一区二区久久 | 美女久久久久久久久 | 久久综合亚洲 | 一区二区三区在线 |