讨厌算法的程序员 | 第七章 归并排序的时间复杂度分析

上一篇归并排序基于分治思想通过递归的调用自身完成了排序,本篇是关于归并排序的最后一部分——分析其时间复杂度。

这个过程中会解释清楚在各种时间复杂度中经常看到的一个记号——“lgn”(以2为底的对数函数)是如何产生的。

递归式

代码分析

对归并排序代码进行逐行分析,当有n > 1个元素时,分解运行时间如下:

分解:第1行是判断,第2行是分解步骤(仅仅计算中间位置),都只需要常量时间,因此D1(n) = Θ(1),D2(n) = Θ(1)。

解决:原问题分解成了2个子问题,每个子问题的规模是原问题的1/2。为了求解一个规模为n/2的子问题,第3行和第4行,各需要T(n/2)的时间,所以一共需要2T(n/2)的时间来求解2个子问题。

合并:在合并算法中已经知道在一个具有n个元素的数组上进行两个子数组MERGE需要Θ(n)的时间,即第5行C(n) = Θ(n)。

将每行的执行时间相加:

T(n) = 2T(n/2) + D1(n) + D2(n) + C(n) (当n > 1)

T(n)的表达式中又包含了T,所以上式称为T(n)的递归式。

根据分析进行简化可得到:

T(n) = 2T(n/2) + Θ(n) (当n > 1)

求解递归式

求解递归式,即得到描述T(n)与输入规模n关系的函数表达式的过程。为方便起见,假设n刚好是2的幂(子数组总可以被2整除直到只有1个元素为止)。该假设不影响递归式解的增长量级。

重写递归式为:T(n) = 2T(n/2) + cn (当n > 1),然后手绘出“递归”层层展开的样子——递归树:

  • 图(a)为T(n),是未进行递归时的表达;
  • 图(b)为扩展成一棵描绘递归式的等价树,cn是树根(代表递归的顶层算法中的代价),根的两棵子树是两个较小的递归式T(n/2);
  • 图(c)是继续扩展T(n/2)后的样子。

构造递归树

如此层层递归扩展,得到一颗完整的递归树如下:

完整递归树

将递归式完全扩展后,形成了完整的递归树,一共是lgn+1层(如果n是8,则树有lg8+1=4层),每层的代价是cn,那么总代价cnlgn+cn,忽略低阶项和常量c,即有T(n) = Θ(nlgn)。

关于Θ(nlgn)

现在知道时间复杂度中的lgn是如何产生的了:是基于递归的原因。

lgn即log2n,是以2为底的对数函数,比任何线性函数增长要慢,所以在足够大的输入情况下,在最坏情况下,运行时间为Θ(nlgn)的归并排序将优于运行时间为 Θ(n2)的插入排序。

y=x与y=lgx

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mathor

二分查找与二分答案(4)

14310
来自专栏ml

错排公式

错排公式 百科名片 pala提出的问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法? 这个问题推广一下,就是错排问题: n个有...

3719
来自专栏Coding迪斯尼

如何进入Google,面试算法之道:在双升序二维数组中的快速查找

1013
来自专栏数据结构与算法

洛谷P2503 [HAOI2006]均分数据(模拟退火)

1470
来自专栏King_3的技术专栏

leetcode-59-螺旋矩阵 II

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

763
来自专栏C语言及其他语言

【每日一题】问题1075: 台球碰撞(此次问题较难)

题目描述 在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球...

2585
来自专栏Bingo的深度学习杂货店

Q152 Maximum Product Subarray

Find the contiguous subarray within an array (containing at least one number) wh...

3897
来自专栏Java开发者杂谈

依赖数组特性的几种非比较排序算法

前言:   前面所讲的排序算法基本都是需要进行两个数依次比较,这种两个数依次比较的算法不依赖于数组重元素的特性并且有下界Ω(nlogn)。换句话说就是使用比较排...

3987
来自专栏King_3的技术专栏

leetcode-628-Maximum Product of Three Numbers

1194
来自专栏数据结构与算法

1729 单词查找树 2000年NOI全国竞赛

1729 单词查找树 2000年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 D...

3385

扫码关注云+社区