主定理与递归树计算算法时间复杂度
2014-03-18 09:01
288 查看
主定理如下定义:
例如归并排序中,a=b=2,f(n)=n,T(n)=2T(n/2)+n,那么,满足第二种情况,则T(n)=O(nlogn)。
对于递归方程T(n)=aT(n/b+f(n)的求解,可以使用递归树,用归并排序为例:
每一节点中都将当前的自由项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值。
例如归并排序中,a=b=2,f(n)=n,T(n)=2T(n/2)+n,那么,满足第二种情况,则T(n)=O(nlogn)。
对于递归方程T(n)=aT(n/b+f(n)的求解,可以使用递归树,用归并排序为例:
每一节点中都将当前的自由项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值。
相关文章推荐
- MIT:算法导论——2.渐近符号、递归及解法_和连续子数组的最大和、主方法/主定理求时间复杂度
- 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算
- 算法的时间复杂度(计算实例)
- 如何计算算法的时间复杂度
- 算法的时间复杂度的计算
- 数据结构::递归时间复杂度的计算
- 第14话:如何计算算法的时间复杂度
- 如何计算一个算法的时间复杂度
- 算法初级01——认识时间复杂度、对数器、 master公式计算时间复杂度、小和问题和逆序对问题
- 计算算法的时间复杂度和空间复杂度
- 关于大整数的乘法的算法时间复杂度的计算过程推导(纯属个人推测,请高人指正)
- 【算法导论学习-008】算法时间复杂度的计算
- 算法效率的度量方法,算法时间复杂度、空间复杂度计算
- 算法的时间复杂度(计算实例)
- 高级算法 应用主项定理Master Method 求时间复杂度 判断有向图是否有环
- 计算算法时间复杂度的主方法的一种较为简洁的记忆方法
- 算法的时间复杂度(计算实例)
- 算法时间复杂度的计算
- 算法时间复杂度的计算
- 算法-计算时间复杂度