問題是這樣的:一共有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場搞定。
Google 25匹馬的角逐
問題是這樣的 一共有25匹馬,有乙個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定,不用任何其他工具,只通過馬與馬之間的比賽,試問最少 得比多少場才能知道跑得最快的5匹馬。注意 假設每匹馬都跑的很穩定 的意思是在上一場比賽中a馬比b馬快,則下一場比賽中a馬依然比b馬...
Google 25匹馬的角逐
問題是這樣的 一共有25匹馬,有乙個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定,不用任何其他工具,只通過馬與馬之間的比賽,試問最少 得比多少場才能知道跑得最快的5匹馬。注意 假設每匹馬都跑的很穩定 的意思是在上一場比賽中a馬比b馬快,則下一場比賽中a馬依然比b馬...
25匹馬的角逐
內容具體見下 問題是這樣的 一共有25匹馬,有乙個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定,不用任何其他工具,只通過馬與馬之間的比賽,試問最少 得比多少場才能知道跑得最快的5匹馬。注意 假設每匹馬都跑的很穩定 的意思是在上一場比賽中a馬比b馬快,則下一場比賽中...