25匹马取前5名图解法

一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的5匹马?

 

这是一道比较常见的算法题,网上也有比较详细的解法(见http://hxraid.javaeye.com/blog/662643)。今天刚好有人拿来讨论,所以自己也想了下,用一种画图的方式来得到了答案。

 

求解过程如下:

(1)25匹马分五组跑5场得到每组的排序。

 

(2)第6场:用每组的第一名来跑。得到这五组中第一名之间的排序。如图1所示

 

图1 第6场结果

如图1所示,图中红色圈表示可以不需要比较的马

(3)第7场:从6-1所在组选出排名2、3的马,从6-2所在组选出排名第2的马,加上6-2和6-3跑进行比赛。

a. 假设比赛结果如图2a所示。

如图2a所示,实际上在第6场之后已经得到了所有马中的第1名(图中绿色点)。同时根据第7轮的比赛结果,又得到了一些

不需要比较的马(图中新增的红色点),而且可以确定所有马中的第2和3第名分别为7-1和7-2。再用剩下没有确定的4匹马

比赛一场即可以得到所有马中的第4和第5名。这种情况下,最多需要比赛8场。

b. 假设结果如图2b所示

 确定所有马中的第2和3第名分别为7-1和7-2后,还剩下8匹不确定的马。先任意取出5匹来比,得到前两名,再用他们和剩下

的三匹比一场,可以得到所有马的第4和第5名。因此,最多还需要比2场。

 

  综上所述,最坏情况下需要9场比赛才能达到目标。最坏情况出现在6-2和6-3变为7-1和7-2时,这种情况下需要9场,其他

情况都只需要8场。利用画图的方法在每轮比赛后可以直观的删去不需要参与比赛的马,同时选择参与下一轮比赛的马。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值