算法-赛马问题

赛马问题

有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

posted @ 2020-07-18 10:15  szxyx  阅读(1324)  评论(0编辑  收藏  举报