解递归方程时间复杂度

综述

很多时候递归求解是很不错的阶梯思路。但是递归求解的复杂度分析比较麻烦。下面给出基于master理论的求解方法:
此外,近一个月将补充使用递归树等方法进行求解的思路。

方法

一般的递归程序可以看作
T(n) = aT(n/b) + f(n)且f(n) 为theta(n^d)的形式。
其中a是子问题的个数。n/b是子问题的规模。f(n)是本轮操作的复杂度。

注意这里使用theta分析复杂度和O分析是一样的,也即O分析得到同样的结果。

解递归方程时间复杂度_第1张图片
例如
考虑归并排序
T(n) = 2T(n/2)+O(n)
其中a=2,b=2,d=1;
所以有:a=b^d即:
T(n)为O(nlogn)

补充方法

对于T(n) = aT(n/b) + f(n)
我们可以通过g(n)与f(n)比较来得到结果
其中g(n) = n^(loga(b))

若g(n)/f(n)>lg(n) -> T(n) = g(n)
若g(n)=f(n)       -> T(n) = lg(n)* f(n)或lg(n) *g(n)
若f(n)/g(n)>lg(n) -> T(n) = f(n)

注意对于该范围之外的master理论无法求解

你可能感兴趣的:(计算理论)