38头牛中选出3头跑得最快的,使用一个每次只能供6头比赛的场地,要求用最快的方法。(整理)

=================================正解================================================

每6只牛放到赛道里,就相当于一次排序,你要找出38头牛里最快的3只,其实就是找排序里的前3个元素。


赛道已经提示你是用归并排序来实现,直接参考归并排序即可。

由于赛道最多只能容纳6个元素,而每次归并的小箱里的后3个元素是肯定要被淘汰的,所以就是一种特殊的归并。
每次归并只取每个小箱里的前3元素,进行两两归并排序。

搞定。

两两归并排序参考:

http://www.hiahia.org/datastructure/paixu/paixu8.5.1.1-1.htm

本质上来说效率应该还略好于O(nlgn)。


================================下面这种方法有误,并不能保证是最大的3个数==========================================================

从数学计算角度:第一轮:
每组6头共6组.每组取前3名.共18名.与没参加的2头共20头参加第二轮.
第二轮:每组选5头共4组.每组取前3头.共12头参加第三轮.
第三轮:分2组.每组选3.共余6头.参加最后一次比赛.
共比13次


但,我自己算的话,
先把多于的2头,拿掉。
用36头,类似上述的比较。
每次比赛,都是6头一组。
这样,赛到第11轮时,会产生前3名;

这是,把拿掉的两头填进来,共5头,
再需要1轮就得出最终的前三名。

总共需要12轮,比上面的13轮少。

6 * 6 6次
6 * 3 3次
总共还剩 11头 在 分 5 和 6进行两场 分别取前三
最后 在一次  


========================================================================

如果不考虑牛的体力问题,如果可以标记牛的号码那么这样可否。
1 6次6组
2 用6组中的第一跑,则剩下5头牛(剔除第一,必定是前三,剔除未进前三的那些组的牛,剔除第三名那组后面的两头牛,剔除第二排第三的那头牛,跑过的牛剩下5头继续比赛)1次
3 加入一头未跑过的牛,6头牛混跑取前二。1次
4 2的第一,3的第一,第二,剩下的那头牛,得出最后的前三。1次
共9次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值