锦标赛排序算法

 

今天听了吴军老师的《硅谷来信》中的第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)次

 

猜你喜欢

转载自murray2081.iteye.com/blog/2418343
今日推荐