当前位置:文档之家› 递归方程的时间复杂度

递归方程的时间复杂度


一般的,分治法的时间复杂性可归结为递归方程:

T(n) = 1 \t\t n = 1
T(n) = aT(n~b) + D(n) \t n>1

其中,a是子问题的个数,b是递减的步长, ~表示递减方式, D(n)是合成子问题的开销。

通常,递归元的递减方式~有两种:

1、减法,即n – b,的形式
2、除法,即n / b,的形式


一、递减方式为减法

若~为减法,即n – b,则有: T(n) = aT(n – b) + D(n)
= a(a * T(n – 2b) + D(n – b)) + D(n) = ...
= a^k * T(1) +∑a^i * D(n – i * b)
= a^k + ∑a^i * D(n – i * b)

这里k = n / b。不失一般性令b = 1,则k = n。若设D(n)为常数,则有T(n) = O(a^n)(a>1)。即这种情况下递归算法的时间复杂性为指数函数。

综上所述:

T(n) = O(1) \t n = 1
T(n) = O(a^n) \t n>1


二、递减方式为除法
若~为除法,即n / b,则有: T(n) = aT(n / b) + D(n)
= a(a*T(n / b^2) + D(n / b)) + D(n) = ...
= a^k * T(1) + ∑a^i * D(n / b^i)
= a^k + ∑a^i D(n / b^i)

这里bk = n,所以k = log b n。于是:
a^k = a^(log b n) = n^(log b a) = n^p,这里p = log b a。

故若递减方式为n / b,则递归算法的时间复杂性 T(n) = n^p + ∑a^i * D(n / b^i) p = log b a。

这个递归方程的首项n^p称为j^i齐次解,第二项称为特解。特解一般很难估计。但是,对于一些特殊的D(n),可以给出其显式解。


1、D(n)为常数c:
当a>1时
这时,∑a^i D(n / b^i) = c*∑a^i \t a^i = n^j 且j < p。
这是低于p次的多项式,所以T(n) = O(n^p)。
当a=1时
齐次解np为1,特解为c*∑a^i = c*k = c * log b n.
所以T(n) = O(log b n)。

2、D(n)为线形函数cn:
T(n) = O(n) \t\t 当a < b时
T(n) = O(n * log b n) \t\t 当a = b时
T(n) = O(n^p) \t\t 当a > b时

其中,p = log b a。

3、D(n)为幂函数n^x:
T(n) = O(n^x) \t\t 当a < D(b)时
T(n) = O(n^p * log b n) \t\t 当a = D(b)时
T(n) = O(n^p) \t\t 当a > D(b)时

其中,p = log b a。










相关主题
文本预览
相关文档 最新文档