主定理与递归树计算算法时间复杂度

主定理如下定义:

主定理与递归树计算算法时间复杂度_第1张图片

例如归并排序中,a=b=2,f(n)=n,T(n)=2T(n/2)+n,那么,满足第二种情况,则T(n)=O(nlogn)。

对于递归方程T(n)=aT(n/b+f(n)的求解,可以使用递归树,用归并排序为例:

主定理与递归树计算算法时间复杂度_第2张图片

每一节点中都将当前的自由项n留在其中,而将两个递归项T(n/2) + T(n/2)分别摊给了他的两个子节点,如此循环。

图中所有节点之和为:nlogn

可以得到递归树的规则为:

  (1) 每层的节点为T(n) = aT(n / b) + f(n)中的f(n)在当前的n/b下的值;

  (2) 每个节点的分支数为a;

  (3)每层的右侧标出当前层中所有节点的和。


1.当f(n)为常数时:


2.当f(n)=O(n)时:


3.当f(n)为其他情况时,利用递归树分析。


由第二种情况知,若采用分治法对原算法进行改进,则着重点是采用新的计算方法缩小a值。  


你可能感兴趣的:(递归树,主定理,算法时间复杂度)