上一篇文章学习了:【算法设计与分析】15 分治策略:芯片测试

文章目录

  • 1. 快速排序的基本思想
    • 1.2 时间复杂度的计算
      • 1.21 最坏情况时间复杂度计算
      • 1.22 最好情况时间复杂度
      • 1.23 平均时间复杂度计算
  • 2 总结

1. 快速排序的基本思想

  • 用首元素 x 作划分标准,将输入数 组 A划分成不超过 x 的元素构成的数 组 AL,大于 x 的元素构成的数组 AR. 其中 AL, AR从左到右存放在数组 A 的位置.
  • 递归地对子问题 AL和 AR 进行排序, 直到子问题规模为 1 时停止.

下面两张图是它的伪代码表示:

划分的过程为:

以下是划分的例子:

1.2 时间复杂度的计算

1.21 最坏情况时间复杂度计算

最坏情况:

  • W(n) = W(n-1)+n-1
  • W(1) = 0

得出:

  • W(n) = n(n-1)/2

在最坏情况下,有一种可能为:每次划分,首元素依然是在首元素,它是最小的(或者是最大的),下次划分也是同样的结果。这种情况下,是最坏的情况。子问题永远比上一个原问题只少了一个元素。并且每次都需要对n-1个元素进行遍历比较。

由上面的结果看出最坏的情况的时间复杂度是O(n2)

1.22 最好情况时间复杂度

最好情况下,就是每一次划分,AL 与AR 总是均衡的在两边,首元素最终落到中间。那么子问题就变成了原问题的一半的元素数量(但是有两个子问题)。

  • T(n) = 2 T(n/2)+n-1
  • T(1) = 0

得出:
T(n)=Θ(nlogn)T(n) = \Theta (nlogn)T(n)=Θ(nlogn)

以上两种时间复杂度是最好和最坏的情况下。那么均衡额时间复杂度如何计算呢?

在计算均衡时间复杂度之前先来看看划分之后AL 与 AR 的比例是固定时的时间复杂度是多少?

例如子问题的规模比是1:9时,那么有:

  • T(n) = T(n/10) + T(9n/10) + n
  • T(1) = 0

根据递归树,时间复杂度为:

  • T(n)=Θ(nlogn)T(n) = \Theta (nlog n)T(n)=Θ(nlogn)

注释,上面的递归树计算如下:

1.23 平均时间复杂度计算

那么平均时间复杂度计算如下:

首元素最后落在的位置,可能在1,2,3…n

假设情况的概率均为1/n,那么各个情况下,子问题的计算规模如下:

  • 首元素在位置 1: T(0), T(n-1)
  • 首元素在位置 2: T(1), T(n-2)

  • 首元素在位置 n-1: T(n-2), T(1)
  • 首元素在位置 n: T(n-1), T(0)

那么子问题的工作量一共为:2[T(1)+T(2)+…+T(n-1)]

划分工作量 n-1

那么平均情况下时间复杂度计算公式为:

首元素划分后每个位置概率相等

2 总结

快速排序一般人都能写出来,但是要理解它的时间复杂度计算,恐怕并不是一般人都会计算,我们要追根问底。

快速排序算法
• 分治策略
• 子问题划分是由首元素决定 • 最坏情况下时间O(n2)
• 平均情况下时间为O(nlogn)

【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)相关推荐

  1. 算法设计与分析:分治思想 - 入门

    文章目录 分治思想 判断分治的条件 分治思想在排序问题的应用 求逆序对的个数 分治总结 本文参考UCAS卜东波老师的计算机算法设计与分析课程完成 分治思想 分治思想可以归纳为两点: 将一个复杂问题化简 ...

  2. 计算机算法设计与分析二--分治

    1.如果问题和以下数据结构相关,那么把他们分成子问题相对容易 n维数组 矩阵 n个元素的集合 树 有向无环图 通用图 2.分治算法一般应用于可以分成子问题的问题 实例: 一.排序问题:对一个n维数组排 ...

  3. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

  4. 计算机算法设计与分析之----- 递归与分治策略

    递归与分治策略 [Master定理] 快速排序 优化 逆序对(归并算法) 火柴排队[NOIP2013 提高组] 集合求和 方法一: 递归 (2^n ) 方法二: 组合数学知识 [HNOI2008]越狱 ...

  5. 算法设计与分析——递归与分治策略——全排列

    算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...

  6. 【算法设计与分析】15 分治策略:芯片测试

    上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...

  7. 【算法设计与分析】14 分治算法的一般描述和分析方法

    本文主要描述分治算法的一般描述和分析方法.衔接上一篇文章:[算法设计与分析]13 分治策略的设计思想 文章目录 1 分治算法的一般性描述 1.1 分支算法的时间分析 1.2 两类常见的递推方程与求解方 ...

  8. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

  9. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

最新文章

  1. 24GHz和77GHz毫米波雷达技术细节
  2. 一文读懂比特币UXTO,TA其实没那么神秘!
  3. [FreeBSD] kvm下安装virtio驱动的freebsd
  4. jquery入门(一)
  5. comsol移动网格_将动网格模型迁移到 5.3a
  6. 人生实苦,可这就是人生
  7. PostgrSQL流复制wal异常
  8. 云上自动化:云上编排让上云更简单
  9. 域名,端口,IP总结
  10. beanfactory的实现类_ApplicationContext和BeanFactory的区别
  11. 【翻译】CodeMix使用教程(七):扩展
  12. Hadoop2.7.4 HA centos6.8
  13. 在进入上交之后对未来的展望(第一篇博客)
  14. DSP eQEP正交编码
  15. Unable to launch WebDriverAgent because of xcodebuild failure: “iproxy exited with code ‘234‘“
  16. Kubernetes v1.10.4 安装记录
  17. 树莓派 cpolar免费vip穿透局域网异地连接(ssh web均可)
  18. Web基础——JavaScript之事件绑定与事件对象
  19. 将字符串“I am a student.”逆序输出为“student. a am I”
  20. Memwatch简介

热门文章

  1. Install/Remove of the Service Denied错误解决
  2. escape mysql_mysql_escape_string()函数用法分析
  3. mysql中 课程1比课程2成绩高_小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数...
  4. vue中mode的设置
  5. Webpack基础之加载器
  6. A Quantization-Friendly Separable Convolution for MobileNets
  7. 从RGB到Lab色彩空间的转换
  8. python内置函数返回序列中最大元素_Python之路(第八篇)Python内置函数、zip()、max()、min()...
  9. java 变量锁_并发编程高频面试题:可重入锁+线程池+内存模型等(含答案)
  10. beego——模板处理