分类目录:《算法设计与分析》总目录
相关文章:
· 排序算法(一):插入排序
· 排序算法(二):归并排序
· 排序算法(三):堆排序
· 排序算法(四):选择排序
· 排序算法(五):冒泡排序
· 排序算法(六):希尔排序
· 排序算法(七):快速排序
\qquad· ①基础知识
\qquad· ②快速排序的性能
\qquad· ③快速排序的随机化
\qquad· ④快速排序的分析
· 排序算法(八):计数排序
· 排序算法(九):基数排序
· 排序算法(十):桶排序
· 排序算法:比较排序算法的下界
· 排序算法:十大排序算法总结


我们在《排序算法》系列的开头介绍了几种能在O(nlg⁡n)O(n\lg n)O(nlgn)时间内排序nnn个数的算法。归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。而且,对于这些算法中的每个,我们都能给出nnn个输入数值,使得该算法能在Ω(nlg⁡n)\Omega(n\lg n)Ω(nlgn)时间内完成。

《排序算法》的1-7节的算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们把这类排序算法称为比较排序

下文将证明对包含nnn个元素的输入序列来说,任何比较排序在最坏情况下都要经过Ω(nlg⁡n)\Omega(n\lg n)Ω(nlgn)次比较。因此,归并排序和堆排序是渐近最优的,并且任何已知的比较排序最多就是在常数因子上优于它们。

从《排序算法》的第8节开始,我们讨论了三种线性时间复杂度的排序算法:计数排序、基数排序和桶排序。当然,这些算法是用运算而不是比较来确定排序顺序的。因此,下界Ω(nlg⁡n)\Omega(n\lg n)Ω(nlgn)对它们是不适用的。

在一个比较排序算法中,我们只使用元素间的比较来获得输入序列[a1,a2,⋯,an][a_1, a_2, \cdots, a_n][a1​,a2​,⋯,an​]的元素间次序的信息。也就是说,给定两个元素aia_iai​和aja_jaj​,可以执行ai<aja_i<a_jai​<aj​、ai≤aja_i\leq a_jai​≤aj​、ai=aja_i=a_jai​=aj​、ai>aja_i>a_jai​>aj​、ai≥aja_i\geq a_jai​≥aj​中的一个比较操作来确定它们之间的相对次序。我们不能用其他方法观察元素的值或者它们之间的次序信息。

不失一般性,在本文中,我们不妨假设所有的输入元素都是互异的。给定了这个假设后ai=aja_i=a_jai​=aj​的比较就没有意义了。因此,我们可以假设不需要这种比较。同时,注意到ai<aja_i<a_jai​<aj​、ai≤aja_i\leq a_jai​≤aj​、ai>aja_i>a_jai​>aj​和ai≥aja_i\geq a_jai​≥aj​都是等价的,因为通过它们所得到的关于aia_iai​和aja_jaj​的相对次序的信息是相同的。这样,又可以进一步假设所有比较采用的都是ai≤aja_i\leq a_jai​≤aj​形式。

决策树模型

比较排序可以被抽象为一棵决策树。决策树是一棵完全二叉树,它可以表示在给定输入规模情况下,某一特定排序算法对所有元素的比较操作。其中,控制、数据移动等其他操作都被忽略了。下图显示了《排序算法(一):插入排序》中插入排序算法作用于包含三个元素的输入序列的决策树情况。

在决策树中,每个内部结点都以i:ji:ji:j标记,其中,iii和jjj满足1≤i1\leq i1≤i和j≤nj\leq nj≤n,nnn是输入序列中的元素个数。每个叶结点上都标注一个序列π(1),π(2),⋯,π(n)\pi (1), \pi(2), \cdots, \pi(n)π(1),π(2),⋯,π(n)。排序算法的执行对应于一条从树的根结点到叶结点的路径。每一个内部结点表示一次比较ai≤aja_i\leq a_jai​≤aj​,左子树表示一旦我们确定ai≤aja_i\leq a_jai​≤aj​之后的后续比较,右子树则表示在确定了ai>aja_i>a_jai​>aj​后的后续比较。当到达一个叶结点时,表示排序算法已经确定了一个顺序aπ(1)≤aπ(2)≤⋯aπ(n)a_{\pi (1)}\leq a_{\pi(2)}\leq\cdots a_{\pi(n)}aπ(1)​≤aπ(2)​≤⋯aπ(n)​。因为任何正确的排序算法都能够生成输入的每一个排列,所以对一个正确的比较排序算法来说,nnn个元素的n!n!n!种可能的排列都应该出现在决策树的叶结点上。而且,每一个叶结点都必须是可以从根结点经由某条路径到达的,该路径对应于比较排序的一次实际执行过程。因此,在后续内容中,我们将只考虑每一种排列都是一个可达的叶结点的决策树。

最坏情况的下界

在决策树中,从根结点到任意一个可达叶结点之间最长简单路径的长度,表示的是对应的排序算法中最坏情况下的比较次数。因此,一个比较排序算法中的最坏情况比较次数就等于其决策树的高度。同时,当决策树中每种排列都是以可达的叶结点的形式出现时,该决策树高度的下界也就是比较排序算法运行时间的下界。所以我们可得:在最坏情况下,任何比较排序算法都需要做Ωnlg⁡n\Omega n\lg nΩnlgn次比较。而本系列介绍的堆排序(《排序算法(三):堆排序》)和归并排序(《排序算法(二):归并排序》)都是渐近最优的比较排序算法。

算法设计与分析——排序算法:比较排序算法的下界相关推荐

  1. 算法设计与分析——十大经典排序算法一(1--5)

    目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...

  2. 算法设计与分析——十大经典排序算法二(6--10)

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.3.1 Las ...

  3. 算法设计与分析第七章分支限界算法(完结篇)

    算法设计与分析第七章分支限界算法 一.分支界限算法概述 1.分支限界法类似于回溯法,是一种在问题的解空间树上搜索问题解的算法. 分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解 ...

  4. 算法设计与分析第一章递推算法

    算法设计与分析 第一章 递推算法 1.概述 在**已知条件**和**所求问题**之间总存在着某种相互联系的关系,如果可以找到前后过程之间的数量关系(即递推式),那么,从**问题出发逐步推到已知条件** ...

  5. 算法设计与分析_[04] 天牛须算法设计思想分析

    原文链接: https://arxiv.org/abs/1710.10724​arxiv.org 算法实现: 首先,初始化参数 ,分别代表初始解,初始的搜索范围,以及更新步长,且通过原文我们知道: 在 ...

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 《算法设计与分析基础》Chapt 2 算法效率分析基础

    2.1 分析框架 2.1.1 输入规模的度量 大多数情况,以输入数n 矩阵,维数 数值算法,数字的比特数 2.1.2 运行时间的度量单位 找出算法中最重要的操作,即基本操作 计算他们的运行次数 2.1 ...

  8. 【算法设计与分析】流水作业调度问题 动态规划算法与代码实现 超详细

    题目描述 "加工顺序问题"又被称为"批处理作业调度问题". 设有n个工件需要在机器M1和M2上加工,每个工件的加工顺序都是先在M1上加工,然后在M2上加工.t1 ...

  9. 算法设计与分析-TSP六种方法-贪心算法(最近邻点、最短链接)、蛮力法、动态规划法、回溯法、分支限界法、模拟退火

    旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径, ...

  10. 王晓东算法设计与分析c语言,Algorithm 计算机算法设计与分析(王晓东版)课程设计经典例子 - 下载 - 搜珍网...

    程序/ 程序/lab 3-11/ 程序/lab 3-11/3-11 正则表达式匹配问题.cpp 程序/lab 4-11/ 程序/lab 4-11/4-11 删数问题.cpp 程序/lab 4-3/ 程 ...

最新文章

  1. 刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!
  2. 人是要有一点精神的!
  3. pandas 将某一列转换为字符类型_6个冷门但实用的pandas知识点
  4. rtsp服务器搭建_如何从“零”开始搭建直播平台
  5. 微软亚研院:如何看待计算机视觉未来的走向?
  6. php $y=$x^$y;,PHP语法一
  7. oracle 日志丢失,Oracle联机日志文件丢失解决方法一例
  8. 以计算机谈人文科学,阅读下面一段文字,完成问题   自20世纪80年代以来,世界都在谈“软科学技术”,何谓软科学?经常听人说:“脑子不够使。”这其实就是对软科学的需求。于是,从古至今,...
  9. js写随机输出7位数代码教程
  10. asdm不能登录问题;浏览器必须是ie,不能是chrome或者firefox;java的版本,尤其是安全等级和例外需要调整...
  11. 南工院C语言试卷答案,南工院11-12-1C期末B试卷 附答案.doc
  12. Oracle数据库连接、退出缓慢问题查询与处理
  13. Spark操作Hive分区表
  14. linux i386 4G内存,Ubuntu i386 使用4G内存
  15. 01-交换机级联实验
  16. Android4.0上添加截屏快捷方式
  17. 为什么这么优秀的女生要找男程序员做老公?
  18. 混淆矩阵 python实现
  19. 华为防火墙笔记-GRE
  20. 网站颜色配色方案笔记

热门文章

  1. 图解 魔方快速还原 7步法
  2. 单片机——BH1750光照传感器篇
  3. uni-gram与bi-gram语言模型
  4. 面向对象:期待在正确的时间,遇见更好的你
  5. PS如何扣除部分图并添加图
  6. 什么是X86和X86-64
  7. R语言使用sort函数降序排序向量数据、设置decreasing参数进行降序排序
  8. springboot jedis配置以及集群(第三篇) ubuntu16实现redis集群
  9. Windows系统文件共享
  10. 手机浏览器onclick事件不能跳转页面