锦标赛排序算法

 

今天听了吴军老师的《硅谷来信》中的第079封信,了解到了锦标赛算法。

 

首先锦标赛排序又叫树型选择排序,也是用二叉树这种数据结构。这种排序方法比快速排序快,主要是在N个选手中选出K个选手中有优势。这封信中说了一道高盛面试题,即如何从25个选手中决出前三名,就使用了这种算法。

 

这封来信中讲解的方式和标准的锦标赛排序算法不太一样(标准的锦标赛排序算法见文末链接),共分三大步:

第一步:25个选手分成5组,A1~A5,B1~B5,C1~C5,D1~D5,D1~D5,进行5次比赛,结束后5组内部排名就决出了。

第二步:5组中第一名进行第6次比赛,决出第一名。

第三步:剩下的所有组中的所有选手,只有A2、A3、B1、B2、C1有机会参与到第二名、第三名的角逐,最后这5个人再进行第7次比赛,这样第二名和第三名也就决出了。

所以,最优算法比赛7次就能排出冠亚季军的选手。

 

上面这种方法为什么比很多人想到赛八次的方法更有效一点?归纳主要有两点:

首先是少做一些无用功。

在八次的比法中,最后两次让D1、E1不断参加没有必要的比赛,实际上是浪费资源。

其次,要善用信息。

前几次比赛的结果里面有很多有用的信息,这些信息要善于使用。

 

这封来信对我的启发有两点:

1、这道试题可以考察应用计算机知识解决其他问题的应变能力。

2、这道题从这个问题的解法上可以看出,善于掌握工具(锦标赛排序),可以弥补智力上的不足。

 

标准锦标赛排序

https://www.cnblogs.com/james1207/p/3323115.html

标准锦标赛排序原理:

对N个记录的关键字进行两两比较,选出最小(大)的n/2个数,再进行新一轮的比较,直到选出最小(大)的。

1.把N个数放到完全二叉树的叶子节点,两两比较,选出最小的作为根节点,且保存到数组中

2.把最小的原始值设为无穷大,从那个地方开始新一轮比较

注:第一次比较n-1,后面都是log2(n)次

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值