如何计算递推式的效率--引例合并排序

首先认识一个递推式: 算法

T(n) = aT(n/b)+f(n)     (1.0) spa

这就是通用分治递推式了,其中 排序

T(n)表示算法的运行时间,这样aT(n/b)就不难理解为把规模为n的实例划分b个规模为n/b的实例,其中有a个须要求解的实例,f(n)表示将分解的结果合并起来所消耗的时间,听起来拗口的话,那就先看个实例先吧. 效率

为了方面后面的求解,咱们先了解一下下面的定理先吧,具体证实过程就略过啦,之后有机会再补上。 im

主定理 :若是在式(1.0)f(n)O(nd),其中d0,那么: 时间

当a《bd时,T(n)=O(nd) ; a=bd时,T(n)=O(ndlogn) ;a>bdT(n)=O(nlogba). 实例

合并排序情景分析:

当n>1时,C(n) = 2C(n/2)+Cm(n) ,C(1) = 0;

C(n)就是要求的时间效率,2C(n/2)表示把原问题分解成两个子问题(b=2),这两个子问题都要求解(a=2),Cm(n)就是要把左右两个有序序列合并的效率(f(n)).

在最坏的状况下,Cm(n) = n-1.

根据主定理,由d=1,a=2,b=2,能够得出T(n) = O(nlogn)。 

相关文章
相关标签/搜索