`

锦标赛排序算法

 
阅读更多

 

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

 

分享到:
评论

相关推荐

    转 锦标赛排序算法的C 语言实现.doc

    转 锦标赛排序算法的C 语言实现.doc

    锦标赛排序

    用c++实现的算法程序,有数据结构也有运用实现

    六种排序算法代码集合

    数据结构课程设计: 编写程序,实现以下六种排序算法:快排、希尔排序、锦标赛排序、堆排序、归并排序、基数排序。 比较这六种排序算法的效率。

    14种经典排序算法C程序(强烈推荐)

    锦标赛排序(树选择排序)TournamentSort(int *array, int length) 或 TreeSelectionSort(int *array, int length) 3.堆排序 HeapSort(int *array, int length) 交换排序(ExchangeSort.h) 1.冒泡排序 ...

    排序算法总结(转载)

    九 锦标赛排序 十 基数排序">这是排序算法的总结 希望能帮到你 主要排序法有: 一 冒泡(Bubble)排序 相邻交换 二 选择排序 每次最小 大排在相应的位置 三 插入排序 将下一个插入已排好的序列中 四 壳(Shell...

    NSGAII源代码+注释

    /*利用二进制锦标赛产生子代: 1、随机产生一个初始父代Po,在此基础上采用二元锦标赛选择、交叉和变异操作产生子代Qo, Po 和Qo群体规模均为N 2、将Pt和Qt并入到Rt中(初始时t=0),对Rt进行快速非支配解排序,构造...

    六种排序算法

    该文档给出了六种基本排序算法的简单思想,及其C语言实现,所有代码均在VS2010下亲测可用

    NSGA-II.rar

    遗传算法+NSGAII+带精英策略的非支配排序的遗传算法+锦标赛选择法+python源码实例(python3.5) 运行之前,evolution_lib.py中注释的这一句要取消注释 #from evolution_search_nsga import parameter_lower_bound,...

    排序方法总结(包括快速排序,堆排序,归并排序)

    列举了多种排序方法,包括快速排序,锦标赛排序,堆排序和归并排序

    C/C++ 10种排序法

    10种排序法(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、基数、锦标赛排序)

    10种排序法 冒泡、选择、插入、希尔、

    10种排序法(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、基数、锦标赛排序)

    数组排序法

    10种排序法(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、基数、锦标赛排序

    排序算法介绍

    10种排序算法总结 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三、插入排序——将下一个插入已排好的序列中 四、壳(Shell)排序——缩小增量 ...九、锦标赛排序 十、基数排序

    十种JAVA排序算法实例

    本文件讲了十种JAVA排序方法(冒泡(Bubble)排序——相邻交换 、选择排序——每次最小/大排在相应的位置 、插入排序——将下一个插入已排好的序列中 、壳...、锦标赛排序 、基数排序)的使用,并提供了实例代码可参考

    19-进化计算-遗传算法选择策略1

    选择操作是建立在群体中个体的适应度评估基础上的,目前常用的选择算子有以下几种:轮盘赌、锦标赛、截断选择、蒙特卡洛选择、概率选择、线性排序、指数排序、玻尔兹曼、随

    学习数据结构算法必备

    数据结构算法演示 ... 锦标赛排序(Tournament) (3)其他  快速地址排序(QkAddrst)  基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序(Repl_Selection)

    NSGAII-有约束限制的优化问题_NSGAII约束_NSGAII_NSGA_nsga约束_NSGAII-有约束限制的优化问题_

    此外引入约束锦标赛准则,通过计算约束违背度并与约束允许违背度比较选择出种群中相对满足约束条件的解.本文将传统的NSGA-II改进成可以解决约束多目标区间优化问题的INSGA-II.仿真结果表明该算法的有效性.

    严蔚敏 数据结构算法演示(Windows版)软件

    本课件是一个动态演示数据结构... 锦标赛排序(Tournament) (3)其他  快速地址排序(QkAddrst)  基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序(Repl_Selection)

    基于NSGAII算法的多目标优化问题matlab仿真,含仿真操作录像

    1.版本:matlab2013b,包含仿真操作录像,操作录像使用windows media player播放。...%选择锦标赛的元度 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。

    数据结构算法演示(Windows版)

     锦标赛排序(Tournament) (3)其他  快速地址排序(QkAddrst)  基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序(Repl_Selection) 三、 运行环境 1. 硬件:...

Global site tag (gtag.js) - Google Analytics