首页 > 编程语言 > 详细

算法-赛马问题

时间:2020-07-18 16:39:22      阅读:45      评论:0      收藏:0      [点我收藏+]

赛马问题

有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

算法-赛马问题

原文:https://www.cnblogs.com/szxyx/p/13334716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!