目录
我们上一篇博客重点回顾了复杂度的概念,以及基本的复杂度计算方法。这篇博客我们利用归并排序Merge Sort算法带着大家深入计算复杂度。
1.归并排序概念
假设我们有一个数组A,我们目标是sort(A)排序,整个算法流程为:首先把数组分成两部分,分完之后,针对每一个部分做排序,排序方法也是归并排序。我们做一个最后做一个整合,因为是排序过的两部分,从头部往后面依次比较即可。
我们来想一下,这种排序算法的复杂度是多少?
2.算法的复杂度
假设我们数组有n个数子,我们用T(n)表示该算法的时间复杂度,我们将原来问题拆分为2个子问题,是原来问题的1/2。最后需要n个操作合并排序。我们怎么表示它的时间复杂度呢?{先揭晓答案:T(n)= 2*T(n/2) +n -----> O(n*log n) }
3.主定理Master Theorem
3.1 Master Theorem概念
主定理对上面那种可以把一个问题分解为若干子问题上非常有价值,
T(n)= 2*T(n/2) +n 是我们上面分析得到的结果,这个就非常符合主定理适用形式。我们怎么得到这种递归函数复杂度呢?下面的三个符号(O/Θ/Ω)
主定理的内容可以解释如下所示:只需要分别计算左右二者大小即可。
3.2 Master Theorem例子分析
4.利用Master Theorem求归并排序时间复杂度