【Google】25匹馬的角逐

bian_qing_quan11發表於2017-07-31

問題是這樣的:一共有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場搞定。

相關文章