计算机大赛算法,计算机经典算法——锦标赛排序算法
关键词:二叉树
生活中的淘汰锦标赛:在单淘汰的锦标赛中,选手们两两比赛,胜者晋级,败者被淘汰。比如世界乒乓球锦标赛或者大满贯网球赛就是这么进行的。
这样一来,就可以把比赛的赛程和结果对应成一个二叉树。在树中每一个选手是二叉树中的一个叶子结点,每一场比赛就相当于两个数字在比大小,数字大的选手获胜进入下一轮,成为树干上的根。所以,进入到某一轮比赛的选手,其实都是某个子数干的根结点。最后的冠军就是整个二叉树的根结点。这种赛制的合理性需要一个假设:A>B, B>C --> 必然有A>C(输赢的传递性)
锦标赛排序法:对所有数字排序,复杂度是nlogn(和快速排序差不多)。特定的场合,它更快,如果只选第一名,则算法复杂度只有N,若需要选出第二名,则额外增加logn就可以了,对第三名也是如此。这种方法在从N个选手中选出K个选手的事情中特别快
工程中,要比较两个数字的大小
第一步:把所有的数字放到二叉树的叶子节点,然后按照锦标赛单淘汰的方式,两两比较选出最大
第二步:对于第二大的,从所有被最大的数字淘汰的数字中选择,以此类推选择对于第三、第四大的数字
高盛面试题
假定有25名短跑选手比赛竞争金银铜牌,赛场上有5条赛道,因此一次可以有5个人同时比赛。比赛不及时,只看相应的名次。假如选手的发挥是稳定的,也就是说如果约翰比张三跑的快,张三比凯利跑的快,那么约翰一定比凯利跑得快。最少需要几组比赛才能决出前3名?
第一步,将25名选手分成5组,每组5人。让每个组分别比赛,排出各组的名次来,假设他们的名字就是他们在小组中的编号。
第二步,让各组的第一名,也就是A1、B1、C1、D1、E1再比一次。假设A1在这次比赛中获胜,这样我们就知道了第一名。
第三步,A2和另外四个组的第一名竞争亚军,A2、B1、C1、D1、E1比一次,假设A2这一次赢了,他就是亚军。如果A2没有赢,另外4个组的某个第一名赢了,那个赢的人是亚军,就由那个组下一位选手递进,角逐第三名
第四步,如上图通过8次(5 +1 + 1 +1)选出的5人进行第三名的比赛,前3全部产生
更好的答案:
前6次比赛都是必须的,最佳答案的前2步和上述方案中的前2步是相同的。在第6组比赛(即5个第一名的比赛)结束之后,最后的2名已经没有资格角逐前3名了。
不妨假设那一次比赛从最快到最慢的结果是A1、B1、C1、D1、E1,在D1和E1之前已经有3名选手了,他们肯定不是前3名。
谁还会是第二名的候选呢?根据锦标赛排序的原则,直接输给第一名的人,也就是A2,以及最后附加赛输给他的B1,仅此两人而已。
谁会是第三名的候选呢?和A1在某一组比赛的第三名,他们是A3、C1,或者输给第二名候选人B1的人,即B2。
因此,第二、第三名的候选人一共只有5个, A2、A3、B1、B2和C1,刚好凑一组。这样加上前6次,只需要赛7组,这是最佳方法。
注:来自吴军老师得到课程
计算机大赛算法,计算机经典算法——锦标赛排序算法相关推荐
- 数据结构与算法--经典10大排序算法(动图演示)【建议收藏】
十大经典排序算法总结(动图演示) 算法分类 十大常见排序算法可分为两大类: 比较排序算法:通过比较来决定元素的位置,由于时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序 非比较类型排 ...
- 一点就懂的经典十大排序算法
文章目录 1.概述 2.十大算法性能比较 3.排序算法精讲 3.1 超级经典的排序--冒泡排序和它的优化 3.2 最常用的排序--快速排序(基准值分段,交换,分而治之,递归实现) 3.3 最简单直接的 ...
- 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话 ...
- java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析
0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...
- 算法 经典的八大排序算法详解和代码实现
算法 经典的八大排序算法详解和代码实现 排序算法的介绍 排序的分类 算法的时间复杂度 时间频度 示例 图表理解时间复杂度的特点 时间复杂度 常见的时间复杂度 空间复杂度 排序算法的时间复杂度 冒泡排序 ...
- 经典的十种排序算法 C语言版
经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...
- 算法 64式 14、排序算法整理_1_1到15题
1 算法思想 这里将寻找最小/大的前k个数,寻找逆序对,线性时间选择(寻找第k小/大的元素),奇偶/大小写字符分别放在前后部分等和排序相关类型的题目,放在了排序而不是查找中. 1.1含义 排序含义:重 ...
- 【数据结构排序算法系列】数据结构八大排序算法
排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将 ...
- prim算法适用条件_内部排序算法的比较及应用
"内部排序包括 插入排序(直接插入排序.折半插入排序.希尔排序), 交换排序(冒泡排序.快速排序), 选择排序(简单选择排序.堆排序), ...
- 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...
最新文章
- 由SELECT *引发的多个生产故障,问题藏太深了吧……
- Extjs 集合了1713个icon图标的CSS文件
- 动态规划套路在最长公共子串、最长公共子序列和01背包问题中的应用
- php 模拟 https请求头,php 模拟 http 请求
- python3 -c 和 python3 -m
- java servlet上传centos服务器
- spring mvc教程_Spring MVC教程
- 约瑟夫环问题——python
- Video-Swin-Transformer (二)
- 【风马一族_Java】如何使用ACSLL表的值,
- 一个壮观的雨瀑布视频
- sketchup草图家具拆单软件 衣柜橱柜拆单 SU 全屋定制拆单 有屋软件 下料机
- iNavFlight之MSP DJI协议分析
- 拼多多数据分析工具有哪些?拼多多数据分析工具介绍
- 【信息系统项目管理师】第十三章 项目合同管理思维导图
- lcs问题java_动态规划法(十)最长公共子序列(LCS)问题
- What are Triangulation, Trilateration, and Multilateration?
- 席育凡-软件研发文章
- 宿舍管理系统(Java毕业设计)
- pythony第三章:列表、元组、字典和集合(1)
热门文章
- 【hadoop权威指南第四版】第五章MR应用【笔记+代码】
- 【LeetCode】643. 子数组最大平均数 I
- 7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format
- 人生苦短,使用百度云SDK,编写python代码调用接口的车牌识别
- Python基础操作(2)
- 快讯|腔家政服务商“懒猪到家”完成200万种子轮融资,卡伊妮洗衣连锁投资... 1
- CentOS虚拟机根分区磁盘扩容操作
- Debian7.5--双屏显示问题
- 哈工大(HIT)计算机网络 翻转课堂 实验 mooc答案 总结
- 《软件技术学研会-技术培训》第0章 操作系统安装