归并排序

  • 归并排序:利用分治的思想,先排左边一半,再排右边一半,最后再将两边有序的合并起来。
  • 时间复杂度: 用T(n)T(n)T(n)表示排大小为nnn的数组的时间:T(n)=2T(n/2)+nT(1)=1T(n)=2T(n/2)+n\quad T(1)=1T(n)=2T(n/2)+nT(1)=1

关于如何解这个递归方程,这里介绍其中一种,我们假设n是2的幂:

  • 首先,我们递推关系式的两边同时除以n,得到:T(n)n=T(n/2)n/2+1\frac{T(n)} {n}=\frac{T(n/2)}{n/2}+1nT(n)​=n/2T(n/2)​+1。
  • 因为该方程对2的幂的任意n是成立的,于是还可以写成:
  • T(n/2)n/2=T(n/4)n/4+1\frac{T(n/2)}{n/2}=\frac{T(n/4)}{n/4}+1n/2T(n/2)​=n/4T(n/4)​+1
  • T(n/4)n/4=T(n/8)n/8+1\frac{T(n/4)}{n/4}=\frac{T(n/8)}{n/8}+1n/4T(n/4)​=n/8T(n/8)​+1
  • T(2)2=T(1)1+1\frac{T(2)}{2}=\frac{T(1)}{1}+12T(2)​=1T(1)​+1
  • 此时,我们把这些式子的左边和右边统一加起来,会发现很多项都同时消掉了,我们称之为叠缩公式
  • 最后剩下:T(n)n=T(1)1+logn\frac{T(n)}{n}=\frac{T(1)}{1}+lognnT(n)​=1T(1)​+logn,此时T(n)=nlogn+n=O(nlogn)T(n)=nlogn+n=O(nlogn)T(n)=nlogn+n=O(nlogn)

快速排序

  • 快速排序的主要思想依然是分治
    1、从待排数组中选出一个枢纽元(pivotpivotpivot);
    2、然后将数组分割为两个不相交集合s1,s2s1,s2s1,s2,左半边集合的元素都小于等于pivotpivotpivot,右半边集合元素都大于等于pivotpivotpivot。
    3、最后,分别排序左半边、右半边。

  • 快速排序的枢纽元选择策略一般为:
    1、三数中值分割法:即选择待排数组的左段、右段和中心位置的中值作为枢纽元。
    2、待排数组的第一个元素:但是这很可能会出现极坏的情况:那就是这个元素是这个数组里面最小的或者最大的,那么其他剩余元素要么被分进s1s1s1,要么被分进s2s2s2,TC:O(n2)TC:O(n^2)TC:O(n2)。这种最坏的情况出现在整个数组是预排序的(非递增、非递减)。

  • 时间复杂度的关系为:T(n)=T(i)+T(n−i−1)+cnT(n)=T(i)+T(n-i-1)+cnT(n)=T(i)+T(n−i−1)+cn(iii为集合s1s1s1中的元素个数,分割数组也需要线性时间)

  • 那么先来分析下快速排序的最好情况:那就是分割完数组后,集合s1,s2s1,s2s1,s2中元素大小都一样。
    即T(n)=2T(n/2)+cnT(n)=2T(n/2)+cnT(n)=2T(n/2)+cn,那么答案和刚才分析的归并排序是一样的,等式两边同时除以nnn,然后利用缩叠公式,最后T(n)=n+knlogn=O(nlogn)T(n)=n+knlogn=O(nlogn)T(n)=n+knlogn=O(nlogn)。

  • 然后说下刚才提到的可能出现的最坏情况(即每次除了枢纽元之外的元素全在s1s1s1或s2s2s2):T(n)=T(n−1)+cnT(n)=T(n-1)+cnT(n)=T(n−1)+cn。
    我们用n−1n-1n−1不断替换nnn可以得到:T(n−1)=T(n−2)+c(n−1),T(n−2)=T(n−3)+c(n−3)...T(2)=T(1)+c(2)T(n-1)=T(n-2)+c(n-1),T(n-2)=T(n-3)+c(n-3)...T(2)=T(1)+c(2)T(n−1)=T(n−2)+c(n−1),T(n−2)=T(n−3)+c(n−3)...T(2)=T(1)+c(2),依然是等式左右两边同时相加,得到:T(n)=c(2+3+...+n),T(n)=O(n2)T(n)=c(2+3+...+n),T(n)=O(n^2)T(n)=c(2+3+...+n),T(n)=O(n2)。

  • 最后,来说下平均情况,因为对于s1s1s1,每个大小都是等可能的,所以都有1n\frac {1}{n}n1​的可能:

归并排序 快速排序 时间复杂度分析 (基本递归时间复杂度分析)相关推荐

  1. 语法分析:自上而下分析(递归下降分析法+预测分析法)

    语法分析:自上而下分析 目录 语法分析:自上而下分析 知识背景 递归下降分析法 内容一:根据文法生成子程序 内容二:调用文法开始符号所对应的子程序 预测分析法 内容一:构造预测分析表 内容二:预测分析 ...

  2. 算法:递归(借助递归树来求解分析递归算法的时间复杂度)

    递归代码的时间复杂度分析起来非常麻烦,今天我们尝试来借助递归树分析递归算法的时间复杂度. 1. 递归树与时间复杂度分析 递归的思想就是将大问题一层一层地分解为小问题来求解,如果我们把这个分解过程画成图 ...

  3. 递归树——分析递归算法的时间复杂度

    递归树 递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分解为小小问题. 这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止. 如果我们把这个一层一层的分解过程画成图 ...

  4. 递归树分析时间复杂度

    递归树分析时间复杂度 递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分为小小问题.直到问题的数据规模分解的足够小,不用继续递归分解为止 方法: 1.知道树的高度h,用高度h乘以每一层的时间 ...

  5. 【王道思维扩展1】求解斐波那契数列的递归和非递归算法,并分析两种时间复杂度

    1.斐波那契数列 2.递归与非递归的实现 1).递归 时间复杂度O(2^N) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl ...

  6. 分析递归函数的时间复杂度

    递归算法的时间复杂度表达式: O(T) = R * O(s) O(T)表示时间复杂度 R表示递归调用的次数 O(s)每次递归调用计算的时间复杂度 想想斐波那契函数,它的递归关系是f(n) = f(n- ...

  7. 【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )

    文章目录 一.小 O 记号 ( 严格渐进上界 ) 二.分析算法的时间复杂度 一.小 O 记号 ( 严格渐进上界 ) 如果 g(n)\rm g(n)g(n) 是 f(n)\rm f(n)f(n) 渐进上 ...

  8. 简单分析算法的时间复杂度

    目录 一.什么是算法的时间复杂度 二.如何分析一个算法的时间复杂度 1.有确定次数的算法 2.次数不确定的算法 一.什么是算法的时间复杂度         时间复杂度是一个函数 ,定性描述一个算法(程 ...

  9. 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

    对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

  10. 【数据结构Python描述】手动实现一个list列表类并分析常用操作时间复杂度

    文章目录 一.使用动态数组实现列表 1. 动态数组概念引入 2. 验证列表实现策略 3. 动态数组算法实现 二.摊销法分析时间复杂度 1. 摊销法使用示例 2. 数组容量指数增长 3. 数组容量等差增 ...

最新文章

  1. kivy中kv语言的变态用法
  2. JDBC——jdbcUtils加载配置文件赋值
  3. 博客园是否提供“我参与的主题”功能?
  4. C#遍历文件读取Word内容以及使用BackgroundWorker对象打造平滑进度条
  5. SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
  6. 【知识整理】这可能是最好的RxJava 2.x 入门教程(四)
  7. kaldi 语音识别
  8. 仿真器连接出现NO TARGET CONNECTED解决方法及cube配置方法
  9. *第九周*数据结构实践项目一【猴子选大王(数组)】
  10. C++ error C3867 请使用 ““ 来创建指向成员的指针
  11. Java solrj client 添加JavaEntity Bean
  12. 【独行秀才】macOS Monterey 12.0 Beta4(21A5294g)原版镜像
  13. 计算机专业学生的必备文具,初一新生必备文具100件 学霸用的文具清单
  14. 微信小程序开发者工具打不开的问题
  15. OSG-简单模型控制
  16. UUID和UUID_SHORT
  17. 基于AWS的Lambda+Alexa服务添加智能家居设备 (一)
  18. python写代码怎么分行_python怎么分行
  19. 【模拟面试-10年工作】项目多一定是优势吗?
  20. 光学双缝单缝公式应用分析

热门文章

  1. 曝光机与曝光能量_曝光机能量转换卡,适合川宝,志圣全自动机
  2. 20180416-H · Global Mortality · ggplot2 地图 gganimate 动图 动态地图 · R 语言数据可视化 案例 源码
  3. 早教机器人AI化,人机联动成新风口
  4. 什么是 MVC 和 三层架构?
  5. 跆拳道WTF和ITF的区別
  6. 【spring源码】源码分析
  7. mapbox symbols 层级设置_Mapbox 地图样式规范
  8. 数据结构——链表数组
  9. 怎么限制表单用户的输入行为,拒绝用户恶意输入非法字符
  10. 计算机机表格日生产量怎么算,如何学习工业工程的改善思维及方法