N*N匹马,N个赛道,求出最快N匹马的解法
首先:分為9組分別進行比賽后得到每一組的比賽名次,比賽場次:9;
然后:將9組的每組第一名比賽,得到第一名,肯定是所有馬的第一名;比賽場次:1
最后:剩下馬中有資格角逐前四名的馬有A2、A3、A4、B1、B2、B3、C1、C2、D1,剛好有9匹馬,在進行一場比賽就可以了,比賽場次:1
所以最少進行11場比賽。
提高級:問題是這樣的:一共有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場比賽的馬,那么這場比賽的第1,2名一定是整個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場搞定。
總結
以上是生活随笔為你收集整理的N*N匹马,N个赛道,求出最快N匹马的解法的全部內容,希望文章能夠幫你解決所遇到的問題。