归并排序(mergesort)和主定理(master theorem)

有如上数组A=[3, 4, 1, 6, 7, 2, 5,9],需要实现排序,解决以上问题,归并排序算法解决思路步骤如下:

步骤一:将以上数组A,分割成两个或者多个数组,

步骤二:在分割后的数组中采用排序算法,使分割后的两个或者多个数组分别形成有序数组,

步骤三:逐一比较两个或者多个有序数组中元素,比较一组有序数组中元素算作一个操作,如果是分割两组有序数组需要进行n个操作(n为A中元素个数),如果是分割成三个有序数组则需要进行2n个操作

以分割成2组为例,则采用归并排序算法复杂度可以形成以下表达式

T(n) = T(n/2)+T(n/2) +n

主定理(Master Theoerm)介绍

解读:有公式T(n)=aT(n/b)+f(n)

情况一,如果n^{\log_{b}a}>f(n) 则T(n)的时间复杂度为T(n)=O(n^{\log_{b}a})

情况二,如果n^{\log_{b}a}=f(n) 则T(n)的时间复杂度为T(n)=O(n^{\log_{b}a}log^{_{k+1}}n),通过f(n)进行计算f(n)=n^{\log_{b}a}log^{_{k}}n得出k值

情况三,如果n^{\log_{b}a} <f(n)则T(n)的时间复杂度为T(n)= O(f(n))

使用上述公式计算如下式子得出时间复杂度

T(n)=2T(n/2)+n

如题得出 a = 2  b = 2  (n) = n

 n^{\log_{b}a} = n^{\log_{2}2} = n=f(n)

符合情况二,f(n)=n=n^{\log_{b}a}log^{_{k}}n=n^{\log_{2}2}log^{_{k}}n=nlog^{_{k}}n,由此得出k=0

所以T(n)=O(n^{\log_{b}a}log^{_{k+1}}n)=O(n^{\log_{2}2}log^{_{0+1}}n)=O(nlogn)

猜你喜欢

转载自blog.csdn.net/u012130638/article/details/133513762