您的位置:首页 > 其它

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

2012-03-15 23:57 609 查看
=================================正解================================================

每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次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学计算
相关文章推荐