百度面试题:36匹马的解决方案

    问题大致是这样的:有36匹马,通过赛马寻找出最快的3匹。跑道可容纳6匹马同时赛跑,请问最快需要几次赛马可以找到最快的3匹马?

    首先假设每匹马的速度不一样,这样分析可以抓住要害。如果有速度相同的马,则问题会稍微复杂一点,但基本思路是一致的。

    先给出一个最简单的方案。36匹马随机分为6组,分别进行赛跑,那么每组的后3名将被淘汰(这些马不可能是最快的),余下18匹马。将剩余的18匹马再次分为3组进行赛跑,余下9匹。在最后9匹中随机选择6匹进行赛跑,将最快的3匹马与剩下3匹马进行赛跑,最后胜出的3匹马即为所求。总共赛马次数为6+3+1+1=11

    让我们回顾一下上述的赛马过程。我们发现,最初的6次赛马之后,剩余的18匹马实际上是局部有序的,每一组赛马的3匹优胜马都是有序的,很显然上面的做法过于简单,存在冗余操作。我们接下来要做的工作实际上类似于归并排序。那么怎么做可以用最少的赛马次数从18匹马中挑选出最快的3匹呢?

    答案是这样的:将第一组中3匹优胜马按排名令为A1,A2,A3,其中A1最快;同理第二组令为B1,B2,B3;第三组C1,C2,C3;以此类推,直至F1,F2,F3。取A1,B1,C1,D1,E1,F1进行赛跑,为了方便说名,假设结果为A1>B1>C1>D1>E1>F1。很显然,D1,E1,F1,将被淘汰,于是D、E、F组的其余马也将被淘汰,因为他们比这3匹马还慢。再看C组,在剩余有竞争力的9匹马中(分别是A1,A2,A3,B1,B2,B3,C1,C2,C3),C1最多只能排第三,那么C2,C3不可能成为最快的3匹马之一,将其淘汰。同理观察B组,可知B3也不具备成为前三甲的可能,淘汰之!现在只剩下A1,A2,A3,B1,B2,C1共6匹马,再次进行赛马即得到答案。总共赛马次数为6+1+1=8

    结论:最快通过8次赛马可得答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值