Google 25匹馬的角逐

2021-07-04 03:37:16 字數 3052 閱讀 8179

問題是這樣的:一共有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馬快,則下一場比賽中...