排序算法的时间复杂度存在下界问题

这篇具有很好参考价值的文章主要介绍了排序算法的时间复杂度存在下界问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于几种常用的排序算法,无论是归并排序、快速排序、以及更加常见的冒泡排序等,这些排序算法的时间复杂度都是大于等于O(n*lg(n))的,而这些排序算法存在一个共同的行为,那就是这些算法在对元素进行排序的时候,都会进行同一个操作,也就是对数组中取出文件,然后会对取出来的这两个元素进行相互比较。

而针对这个,我们是可以从理论上进行证明,也就是任何的排序算法,只要这个排序算法会存在一个取出元素的动作,那就会存在以上的结论,时间复杂度大于等于O(n*lg(n)),例如在冒泡排序中,依次取出 两个元素,对这个元素进行比较大小,然后调整被比较元素的位置。在归并排序中,将数组分为两个子数组进行排序,然后依次从两个排好序的数组中取出元素进行比较以便将他们合并成为一个元素。在堆排序中,每次往堆中增加一个新元素的时候,它都必须与父节点比较,然后根据比较之后的大小来和父节点进行位置的调换。而在快速排序中,选中一个pivot元素的话,其他元素就需要与该元素进行比较,以此来进行位置调换。

只要将两个元素进行比较,那必然会执行三个测试,也即是a<b,a>b,a=b的行为,由此会得出两个元素的相对位置,如果将等于这个行为与其中一个行为合并之后,该测试行为会被简化为两个行为,也就是a<=b或者是a>b,也就是说,元素比较的的结果会产生两个可能,大于或者小于等于,类比为比较行为当成是一个父节点,可能会产生的两个孩子节点:

排序算法的时间复杂度存在下界问题,排序算法,算法,数据结构

添加图片注释,不超过 140 字(可选)

而如果将排序算法中每一次的比较用图表示,那么就会得到一个二叉树结构,冒泡排序的结果:

排序算法的时间复杂度存在下界问题,排序算法,算法,数据结构

添加图片注释,不超过 140 字(可选)

排序算法的时间复杂度存在下界问题,排序算法,算法,数据结构

添加图片注释,不超过 140 字(可选)

将所有可能性展开之后,就会得到如上图所示的二叉树模型,改模型也叫作决策树模型,在叶子节点中列出了元素排列的所有可能性,因此数组排序之后,其元素的排列一定属于叶子节点所表示的某一种情况。

由此基于元素比较的排序算法,本质上是从顶层根节点开始,沿着左边或者右边的某个分支一直走到底层某个节点。

分析叶子节点的数量与高度的关系,由于一个父节点可以衍生出来两个孩子节点,因此每下降一层的话,节点的数量就是上一层的两倍,如果决策树的高度使用h表示的话,就可以得出叶子节点数量是最多是2的h次方个。

每个节点对应元素的一种排列方式的话,那如果数组会有n个节点,那么节点排列的可能性总共有n的阶乘中,也就是说,决策树底层会有n的阶乘个叶子结点,由于决策树底层叶子结点对应的元素排好序之后的排列,依次决策树的叶子节点必须大于等于n的阶乘。

从这里就可以得出结论,时间复杂度大于等于O(n*lg(n))。文章来源地址https://www.toymoban.com/news/detail-834366.html

到了这里,关于排序算法的时间复杂度存在下界问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解(原理、实现和时间复杂度) 快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出。 快速排序的基本思想是 :通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据

    2024年02月13日
    浏览(51)
  • 时间复杂度为 O(nlogn) 的排序算法

    归并排序 归并排序遵循 分治 的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解,归并排序的步骤如下: 划分 :分解待排序的 n 个元素的序列成各具 n/2 个元素的两个子序列,将长数组的排序

    2024年02月07日
    浏览(34)
  • 时间复杂度为 O(n) 的排序算法

    大家好,我是 方圆 。本文介绍线性排序,即时间复杂度为 O(n) 的排序算法,包括桶排序,计数排序和基数排序,它们都不是基于比较的排序算法,大家重点关注一下这些算法的适用场景。 桶排序 桶排序是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶,每个桶

    2024年02月21日
    浏览(44)
  • 时间复杂度为 O(n^2) 的排序算法

    大家好,我是 方圆 。对于小规模数据,我们可以选用时间复杂度为 O(n 2 ) 的排序算法,因为时间复杂度并不代表实际代码的执行时间,而且它也省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n 2 ) 的排序算法可能会比 O(nlogn) 的排序算法执行效率

    2024年02月07日
    浏览(48)
  • 初阶算法(1):通过简单的排序算法来认识时间复杂度

      第一章    初阶算法(1):通过简单的排序算法来认识时间复杂度   第二章   初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度   第三章   初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用  目录 系列文章目录 前言 一

    2024年02月12日
    浏览(38)
  • 时间复杂度接近O(n)的三种排序算法

    桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有 序的桶里,每个桶内的数据再单独进行排序。桶内排完序之后,再把每个桶内的数据按照顺序依次 取出,组成的序列就是有序的了。 桶排序对要排序数据的要求是非常苛刻的。 首先,要排序的数据需

    2024年02月14日
    浏览(45)
  • 排序算法大全集,从时间复杂度和空间复杂度上对各个排序算法进一步的分析和评估,从插入排序、交换排序、归并排序、基数排序到外部排序,通晓堆排序、希尔排序、快速排序等算法

    目录 1.基本概念和排序方法概述 排序方法的分类 2.插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 3.交换排序 1.冒泡排序 2.快速排序 3.简单选择排序 4.堆排序 4.归并排序 5.基数排序 6.外部排序 7.各类排序方法的综合比较 1.时间性能 2.空间性能 3.排序方法的稳定性能 4.关于

    2024年02月08日
    浏览(48)
  • 初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度

     第一章 初阶算法(1):通过简单的排序算法来认识时间复杂度  第二章 初阶算法(2):进行详细地介绍插入排序的细节和复杂度  第三章 初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用  目录 系列文章目录 前言 一、插入排序的介

    2024年02月13日
    浏览(43)
  • 【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)

     🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏: 《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 ​​ 目录 堆排序 第一种  ​编辑 第二种  TOP-K问题 建堆的时间复杂度 向下调整建堆的时间复杂度:  向上调整建堆的时间

    2024年01月21日
    浏览(61)
  • 快速排序的非递归实现、归并排序的递归和非递归实现、基数排序、排序算法的时间复杂度

    我们使用一个栈来模拟函数的递归过程,这里就是在利用栈分区间。把一个区间分为 [left,keyi-1][key][keyi+1,right]递归下去,直至区间不存在或left right。 如图所示: 先把整体的区间压进去,然后出栈,处理完毕后找到keyi再分为左右两个区间。然后往栈里压有区间,压左区间,就

    2024年02月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包