另一种快速排序的分析方法)对随机化版本的快速排序算法,还有另一种性能分析方法,这一方法关注于每一次单独递归调用的期望运行时间,而不是比较次数。
  a. 证明:给定一个大小为 n n n的数组,任何特定元素被选为主元的概率为 1 / n 1/n 1/n。利用这一点来定义指示器随机变量 X i = I X_i = I Xi​=I{第 i i i小的元素被选为主元}, E [ X i ] E[X_i] E[Xi​]是什么?
  b. 设 T ( n ) T(n) T(n)是一个表示快速排序在一个大小为 n n n的数组上的运行时间的随机变量,试证明:
  
  c. 证明公式(7.5)可以重写为:
  
  d. 证明:
  
  (提示:可以将该累加式分为两个部分,一部分是 k = 2 , 3 , … , ⌈ n / 2 ⌉ − 1 k = 2, 3, …, ⌈n/2⌉-1 k=2,3,…,⌈n/2⌉−1,另一部分是 k = ⌈ n / 2 ⌉ , … , n − 1 k = ⌈n/2⌉, …, n-1 k=⌈n/2⌉,…,n−1。)
  e. 利用公式(7.7)中给出的界证明:公式(7.6)中的递归式有解 E [ T ( n ) ] = Θ ( n l g n ) E[T(n)] = Θ(n{\rm lg}n) E[T(n)]=Θ(nlgn)。(提示:使用代入法,证明对于某个正常数 a a a和足够大的 n n n,有 E [ T ( n ) ] ≤ a n l g n E[T(n)] ≤ an{\rm lg}n E[T(n)]≤anlgn。)
  
  
  a.
  数组每个元素都等可能地被选为主元。因此,对于单一元素,它被选为主元的概率为 1 / n 1/n 1/n。 E [ X i ] E[X_i] E[Xi​]就等于第 i i i小的元素被选为主元的概率,即
   E [ X i ] = P r E[X_i] = Pr E[Xi​]=Pr{第 i i i小的元素被选为主元} = 1 / n = 1/n =1/n。
  
  b.
  对于一个大小为 n n n的数组,如果选定第 q q q小的元素(该元素用 z q z_q zq​表示)为主元,那么划分得到的 2 2 2个子数组的大小分别为 q − 1 q-1 q−1和 n − q n-q n−q。于是可以得到以下递归式
  
   T q ( n ) T_q(n) Tq​(n)表示在选定第 q q q小的元素为主元的前提下,对大小为 n n n的数组进行快速排序的运行时间。其实 T q ( n ) T_q(n) Tq​(n)也是一个随机变量,因为 T ( q − 1 ) T(q-1) T(q−1)和 T ( n − q ) T(n-q) T(n−q)也是随机变量,即 [ T ( q − 1 ) + T ( n − q ) + Θ ( n ) ] [T(q-1) + T(n-q) + Θ(n)] [T(q−1)+T(n−q)+Θ(n)]也是随机变量。于是可以写出 T q ( n ) T_q(n) Tq​(n)的期望
  
   q q q的取值范围是 1 , 2 , … , n 1, 2, …, n 1,2,…,n,于是我们可以计算 T ( n ) T(n) T(n)的期望
  
  上式中, E [ X q ] ∙ E ( T ( q − 1 ) + T ( n − q ) + Θ ( n ) ) = E [ X q ( T ( q − 1 ) + T ( n − q ) + Θ ( n ) ) ] E[X_q ]∙E(T(q-1)+T(n-q)+Θ(n))=E[X_q (T(q-1)+T(n-q)+Θ(n))] E[Xq​]∙E(T(q−1)+T(n−q)+Θ(n))=E[Xq​(T(q−1)+T(n−q)+Θ(n))]成立,是因为随机变量 X q X_q Xq​和 [ T ( q − 1 ) + T ( n − q ) + Θ ( n ) ] [T(q-1)+T(n-q)+Θ(n)] [T(q−1)+T(n−q)+Θ(n)]是互相独立的。
  
  c.
  将公式(7.5)的累加求和部分展开,得到下表
  
  由上表可知,第 q q q个累加项与第 n − q + 1 n-q+1 n−q+1个累加项是完全对称相等的。于是有
  
  上式中, q = 0 q = 0 q=0和 q = 1 q = 1 q=1分别对应的 T ( 0 ) T(0) T(0)和 T ( 1 ) T(1) T(1)都为常数时间,可以将它们拿掉,这样并不影响最终的结果。于是有
  
  d.
  按照提示,将累加式分为2个部分,于是有
  
  e.
  只需证明 E [ T ( n ) ] = O ( n l g n ) E[T(n)] = O(n{\rm lg}n) E[T(n)]=O(nlgn)即可。
  初始情况取 n = 2 n = 2 n=2, T ( 2 ) T(2) T(2)为常数时间。显然,只要取足够大的 a a a,就可使得 T ( 2 ) ≤ a • 2 • l g 2 = 2 a T(2) ≤ a•2•{\rm lg}2 = 2a T(2)≤a•2•lg2=2a成立。
  下面进行归纳过程。假设 E [ T ( n ) ] ≤ a n l g n E[T(n)] ≤ an{\rm lg}n E[T(n)]≤anlgn对 2 , … , n − 1 2, …, n-1 2,…,n−1都成立,那么有
  
  只要取足够大的 a a a,就能使得 a n l g n − 1 4 a n + Θ ( n ) ≤ a n l g n an{\rm lg}n-\frac{1}{4} an+Θ(n)≤an{\rm lg}n anlgn−41​an+Θ(n)≤anlgn成立,即 E [ T ( n ) ] ≤ a n l g n E[T(n)] ≤ an{\rm lg}n E[T(n)]≤anlgn成立。

算法导论 — 思考题7-3 另一种快速排序的分析方法相关推荐

  1. 有序序列中的i个最大数(算法导论思考题9-1)

    有序序列中的i个最大数 (算法导论思考题9-1) a 时间复杂度O(nlgn+i) //总共时间复杂度O(nlgn+i) vector<int> i_largest_number_in_o ...

  2. 算法导论 思考题1-1

    算法导论-思考题1-1 1-1(运行时间的比较)假设求解问题的算法需要 f(n)f(n)f(n)微秒(microseconds),对下表中每个函数f(n)f(n)f(n)和时间ttt可以确定在时间tt ...

  3. 电源并联均流电路的几种最常见分析方法

    并联均流电路的几种最常见分析方法 电源联盟•来源:互联网•作者:佚名 • 2017-11-07 13:51 • 33882次阅读  0 先说说为什么需要均流电路,我们知道,当一个模块无法提供负荷需要的 ...

  4. 算法导论中求解时间复杂度的三种方法

    这一章讲的是递归式(recurrence),递归式是一组等式或不等式,它所描述的函数是用在更小的输入下该函数的值来定义的. 本章讲了三种方法来解递归式,分别是代换法,递归树方法,主方法. 1.代换法( ...

  5. 算法导论 — 思考题8-6 合并有序列表的下界

    (合并有序列表的下界)合并两个有序列表是我们经常会遇到的问题.作为MERGE-SORT的一个子过程,我们在2.3.1节中已经遇到过这一问题.对这一问题,我们将证明在最坏情况下,合并两个都包含nnn个元 ...

  6. 算法导论 思考题 9-3

    (小顺序统计量)要在n个数中选出第i个顺序统计量,SELECT在最坏情况下需要的比较次数T(n)满足T(n) = (n).但是,隐含在记号中的常数项是非常大的.当 i 相对于n来说很小时,我们可以实现 ...

  7. 算法导论 — 思考题8-4 水壶

    (水壶)假设给了你nnn个红色的水壶和nnn个蓝色的水壶.它们的形状和尺寸都各不相同.所有红色水壶的容量都不一样多,蓝色水壶也是如此.而且,对于每一个红色水壶来说,都有一个对应的蓝色水壶,两者容量相等 ...

  8. 几种分布式网络性能分析方法(基于交易图,Transaction graphs)

    区块链的兴起区块链技术在全球的普及,越来越多的分布式应用开始兴起.本文介绍几种分布式网络性能的衡量方法.[目前主要衡量的方法是TPS,Transactions Per Second] 这里介绍几种图分 ...

  9. 算法导论 思考题2-4

    思考题2-4(逆序对) 假设A[1..n]A[1..n]A[1..n]是一个有nnn个不同数的数组,若i<ji<ji<j且A[i]>A[j]A[i]>A[j]A[i]&g ...

最新文章

  1. 【SpringCloud】简介及其核心组件详解
  2. 工作流编程循序渐进(3:While活动)
  3. JavaScript的标签
  4. centos6 图形界面root免密直接登录问题
  5. C/C++网络编程中的TCP保活
  6. Textview的3种事件
  7. c语言 在txt文件中搜索关键词_网络推广外包—网络推广外包如何在搜索引擎中体现关键词优化效果...
  8. android 日期选择器
  9. 动态规划求解所有字符的组合数
  10. Python之数据分析(生成动态图像、示波器效果)
  11. Python安装第三方库临时使用国内源
  12. webgl存本地文件_20万存款该怎么存?银行员工:这样存,每年利息近万元!
  13. MATLAB R2016a 安装详细教程
  14. Win10白色图标制作及替换
  15. 网页前端:JavaScript编程
  16. 高等代数期末考试题库及答案_高等代数II答案试题题目及答案,期末考试题库,章节测验答案...
  17. 一次性说清楚秒验(本机号码一键登录)
  18. CentOS系统简介
  19. Inkscape基础制图教程
  20. STM32G070RBT6迷你开发板制作总结

热门文章

  1. java学习到了瓶颈期,要怎么样才能进阶?
  2. 为什么只有一个韩寒?
  3. jQuery 中的动画特效
  4. jQuery事件监听
  5. 多类型文件的上传和下载
  6. Ezreal--将一个动画切割为四动作动画成功---New Unity Project (3).
  7. 辛普森悖论_所谓的辛普森悖论
  8. sumo学习——sumo介绍及安装
  9. hive自定义函数-身份证号合法性判断
  10. python的四大算法及实例