算法-賽馬問題


賽馬問題

有25匹馬和一個5個賽道的馬場,每場比賽可以決出5匹馬的排名,假設每匹馬發揮穩定,且不會出現名次相同的情況。問:如果要知道25匹馬中跑得最快的馬,需要幾場比賽?如果需要知道跑得第二快的馬,需要幾場比賽?第三快的呢?

題目分析

題解

  • 遞增矩陣解法

首先將25匹馬分5組比賽5次,可以得到各組內的排名。將5個第一名再賽一次,就可以知道25匹馬中最快的馬。將最快的馬那組的第二名替換掉第一名,再賽一次,就可以知道第二快的馬是誰。

根據賽馬的各組名次,可以構建出賽馬的遞增矩陣,其中每一列代表一個分組,從上至下為從快到慢。

 

 

 

根據該矩陣可以使用貪心算法的思想,很快的選出最快的3匹馬。

  • 第一快的馬

    首先可以對第一行的馬進行比賽,選出最快的馬,就為所有馬中最快的馬。這里我們假設為左上角的a1。對於第一行的馬的比賽,我們假設比賽結果為a1>b1>c1>d1>e1

  • 第二快的馬

    由第一次比賽的結果,可知,第二快的馬會在b1和a2中選出,因為b1此時是以其為左上角元素的矩陣的最大值,而a2是其所在列的最大值,因此選兩者進行比賽,可以得到結果。

  • 第三快的馬

    • 第二快的馬為b1

      此時根據步驟二的思路,分別選取此時各行各列的最大值。對於第一列此時可選的最大值為a2,對於第二列,此時可選的最大值為b2,對於第三列及以后,因為c1此時為其中的最大值,所以為c1。

      因此此時對a2、b2、c1進行比較可以得到第三快的馬。

    • 第二快的馬為a2

      此時可選的最大值為第一列的a3,以及后四列的最大值b1,所以只要比較a3與b1就可以得到第三快的馬。

  • 總結

    第一快需要6場、第二快需要7場、第三塊需要8場

參考資料

http://blog.sina.com.cn/s/blog_eb52001d0101i8oq.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM