【Google】25匹馬的角逐
問題是這樣的:一共有25匹馬,有一個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定,不用任何其他工具,只通過馬與馬之間的比賽,試問最少 得比多少場才能知道跑得最快的5匹馬。
注意: "假設每匹馬都跑的很穩定" 的意思是在上一場比賽中A馬比B馬快,則下一場比賽中A馬依然比B馬快。
稍微想一下,可以採用一種 競標賽排序(Tournament Sort)的思路。 見《選擇排序 》
(1) 首先將25匹馬分成5組,並分別進行5場比賽之後得到的名次排列如下:
A組: [A1 A2 A3 A4 A5]
B組: [B1 B2 B3 B4 B5]
C組: [C1 C2 C3 C4 C5]
D組: [D1 D2 D3 D4 D5]
E組: [E1 E2 E3 E4 E5]
其中,每個小組最快的馬為[A1、B1、C1、D1、E1]。
(2) 將[A1、B1、C1、D1、E1]進行第6場,選出第1名的馬,不妨設 A1>B1>C1>D1>E1. 此時第1名的馬為A1。
(3) 將[A2、B1、C1、D1、E1]進行第7場,此時選擇出來的必定是第2名的馬,不妨假設為B1。因為這5匹馬是除去A1之外每個小組當前最快的馬。
(3) 進行第8場,選擇[A2、B2、C1、D1、E1]角逐出第3名的馬。
(4) 依次類推,第9,10場可以分別決出第4,5名的嗎。
因此,依照這種競標賽排序思想,需要10場比賽是一定可以取出前5名的。
仔細想一下,如果需要減少比賽場次,就一定需要在某一次比賽中同時決出2個名次,而且每一場比賽之後,有一些不可能進入前5名的馬可以提前出局。 當然要做到這一點,就必須小心選擇每一場比賽的馬匹。我們在上面的方法基礎上進一步思考這個問題,希望能夠得到解決。
(1) 首先利用5場比賽角逐出每個小組的排名次序是絕對必要的。
(2) 第6場比賽選出第1名的馬也是必不可少的。假如仍然是A1馬(A1>B1>C1>D1>E1)。那麼此時我們可以得到一個重要的結論:有一些馬在前6場比賽之後就決定出局的命運了(下面粉色字型標誌出局)。
A組: [A1 A2 A3 A4 A5]
B組: [B1 B2 B3 B4 B5 ]
C組: [C1 C2 C3 C4 C5 ]
D組: [D1 D2 D3 D4 D5 ]
E組: [E1 E2 E3 E4 E5 ]
(3) 第7場比賽是關鍵,能否同時決出第2,3名的馬呢?我們首先做下分析:
在上面的方法中,第7場比賽[A2、B1、C1、D1、E1]是為了決定第2名的馬。但是在第6場比賽中我們已經得到(B1>C1>D1>E1),試問?有B1在的比賽,C1、D1、E1還有可能爭奪第2名嗎? 當然不可能,也就是說第2名只能在A2、B1中出現。實際上只需要2條跑道就可以決出第2名,剩下C1、D1、E1的3條跑道都只能用來湊熱鬧的嗎?
能夠優化的關鍵出來了,我們是否能夠通過剩下的3個跑道來決出第3名呢?當然可以,我們來進一步分析第3名的情況?
● 如果A2>B1(即第2名為A2),那麼根據第6場比賽中的(B1>C1>D1>E1)。 可以斷定第3名只能在A3和B1中產生。
● 如果B1>A2(即第2名為B1),那麼可以斷定的第3名只能在A2, B2,C1 中產生。
好了,結論也出來了,只要我們把[A2、B1、A3、B2、C1]作為第7場比賽的馬,那麼這場比賽的第2,3名一定是整個25匹馬中的第2,3名。
我們在這裡列舉出第7場的2,3名次的所有可能情況:
① 第2名=A2,第3名=A3
② 第2名=A2,第3名=B1
③ 第2名=B1,第3名=A2
④ 第2名=B1,第3名=B2
⑤ 第2名=B1,第3名=C1
(4) 第8場比賽很複雜,我們要根據第7場的所有可能的比賽情況進行分析。
① 第2名=A2,第3名=A3。那麼此種情況下第4名只能在A4和B1中產生。
● 如果第4名=A4,那麼第5名只能在A5、B1中產生。
● 如果第4名=B1,那麼第5名只能在A4、B2、C1中產生。
不管結果如何,此種情況下,第4、5名都可以在第8場比賽中決出。其中比賽馬匹為[A4、A5、B1、B2、C1]
② 第2名=A2,第3名=B1。那麼此種情況下第4名只能在A3、B2、C1中產生。
● 如果第4名=A3,那麼第5名只能在A4、B2、C1中產生。
● 如果第4名=B2,那麼第5名只能在A3、B3、C1中產生。
● 如果第4名=C1,那麼第5名只能在A3、B2、C2、D1中產生。
那麼,第4、5名需要在馬匹[A3、B2、B3、C1、A4、C2、D1]七匹馬中產生,則必須比賽兩場才行,也就是到第9場角逐出全部的前5名。
③ 第2名=B1,第3名=A2。那麼此種情況下第4名只能在A3、B2、C1中產生。
情況和②一樣,必須角逐第9場
④ 第2名=B1,第3名=B2。 那麼此種情況下第4名只能在A2、B3、C1中產生。
● 如果第4名=A2,那麼第5名只能在A3、B3、C1中產生。
● 如果第4名=B3,那麼第5名只能在A2、B4、C1中產生。
● 如果第4名=C1,那麼第5名只能在A2、B3、C2、D1中產生。
那麼,第4、5名需要在馬匹[A2、B3、B4、C1、A3、C2、D1]七匹馬中產 生,則必須比賽兩場才行,也就是到第9場角逐出全部的前5名。
⑤ 第2名=B1,第3名=C1。那麼此種情況下第4名只能在A2、B2、C2、D1中產生。
● 如果第4名=A2,那麼第5名只能在A3、B2、C2、D1中產生。
● 如果第4名=B2,那麼第5名只能在A2、B3、C2、D1中產生。
● 如果第4名=C2,那麼第5名只能在A2、B2、C3、D1中產生。
● 如果第4名=D1,那麼第5名只能在A2、B2、C2、D2、E2中產生。
那麼,第4、5名需要在馬匹[A2、B2、C2、D1、A3、B3、C3、D2、E1]九匹馬中 產 生,因此也必須比賽兩場,也就是到第9長決出勝負。
總結:最好情況可以在第8場角逐出前5名,最差也可以在第9場搞定。
相關文章
- 圖片馬的二次渲染
- 關於所有馬的顏色都相同
- 小馬的大前端之路——Node.js初探前端Node.js
- 奧巴馬的第一行程式碼行程
- 防止網站被掛馬的基本原則網站
- 一個不坐旋轉木馬的朋友
- 一個支付寶木馬的分析溯源之旅
- 一次minerd肉雞木馬的排查思路
- 如何修復被掛木馬的php網站PHP網站
- SQL Server是否有特洛伊木馬的測試SQLServer
- 冠軍榮耀,角逐賽道,“移動雲杯”等你來戰!
- 一隻android簡訊控制馬的簡單分析Android
- 老馬的春天:SDWebImage原始碼詳細解讀系列Web原始碼
- 【經典演算法問題】馬的遍歷【回溯】演算法
- 這就是奧巴馬的第一行程式碼行程
- 網路駭客欺騙執行木馬的方法!(轉)
- 《形骸騎士》入圍indie prize 角逐獨立遊戲奧斯卡遊戲
- ChatGPT爆火背後,AI算力成全新角逐風口ChatGPTAI
- 科技巨頭角逐“量子霸權”,“中國隊”量子通訊崛起!
- 【Alright 】SUN宣佈JavaFX將完全開源角逐市場Java
- Linux挖礦木馬的技術演進探討Linux
- 放假期間網站被掛馬的解決辦法網站
- 檢查電腦是否被掛馬的常用命令
- 檔案關聯型木馬的程式設計思路 (轉)程式設計
- CB Insights:谷歌亞馬遜阿里角逐印度金融科技市場谷歌亞馬遜阿里
- 區別木馬與病毒,以及識別與防治木馬的方法
- “馬的遍歷”問題的貪婪法解決演算法演算法
- 寫木馬的經典,dll插入系統程式的原始碼(轉)原始碼
- 以“技術應變”之道,角逐後疫情時代企業數字化轉型
- 熱潮中的雲端計算行業,摩杜雲如何與巨頭角逐?行業
- 角逐5G時代:蘋果、華為、小米、OPPO鎖定5G新戰場蘋果
- 角逐升級:中國速度引領自動駕駛嶄新未來(附下載)自動駕駛
- googleGo
- 超100家頭部遊戲廠商角逐,“超休閒遊戲”正在席捲全球!遊戲
- BAT網際網路三巨頭入局區塊鏈,角逐萬億“鏈”紅利BAT區塊鏈
- “微信硬體創新大賽”深圳初賽—12強團隊角逐冠亞季軍
- “會說話的鍵盤”:一個惡意推廣木馬的詳細分析
- Google向密碼宣戰 - google戒指Go密碼