递归算法时间复杂度

递归算法时间复杂度分析

等比数列和公式:
S n = a 1 ( 1 q n ) 1 q Sn = \frac{a_1(1-q^n)}{1-q}

S n = a 1 a n q 1 q Sn = \frac {a_1-a_nq}{1-q}

S n = q a n a 1 q 1 Sn = \frac{qa_n - a_1}{q-1}


example 1
T ( n ) = 2 T ( n 2 ) + n T(n)=2*T(\frac{n}{2})+n
在这里插入图片描述
T ( n ) = 2 T ( n 2 ) + n = n + n + n . . . . . . + n = n l o g 2 n = O ( n l o g 2 n ) T(n)=2*T(\frac{n}{2})+n\\ =n+n+n......+n\\=n*log_2n\\=O(n*log_2n)


example 2
T ( n ) = 2 T ( n 2 ) + n 2 T(n) =2*T(\frac{n}{2}) +n^2
在这里插入图片描述
T ( n ) = 2 T ( n 2 ) + n 2 = n 2 + n 2 2 + n 2 4 + n 2 8 . . . . . . n 2 2 l o g 2 n 1 = n 2 1 ( 1 2 ) l o g 2 n 1 1 2 = 2 n 2 ( 1 1 n ) = 2 n 2 2 n = O ( n 2 ) T(n) =2*T(\frac{n}{2}) +n^2\\=n^2+\frac{n^2}{2} +\frac{n^2}{4}+\frac{n^2}{8}......\frac{n^2}{2^{log_2n-1}}\\=n^2*\frac{1-(\frac{1}{2})^{log_2n}}{1-\frac{1}{2}}\\=2n^2(1-\frac{1}{n})\\=2n^2-2n\\=O(n^2)


Master method
T ( n ) = a T ( n b ) + f ( n ) T(n)=a*T(\frac{n}{b})+f(n)
在这里插入图片描述

case 1

Leaves grow faster than f
f ( n ) = O ( n l o g b a δ ) T ( n ) = θ ( n l o g b a ) f(n) = O(n^{log_b^{a-\delta}}) \\T(n)=\theta(n^{log_b^a})
case 2

Leaves grow at the same rate as f
f ( n ) = θ ( n l o g b a ) T ( n ) = θ ( n l o g b a l o g b n ) f(n)=\theta(n^{log_b^a})\\T(n)=\theta(n^{log_b^a}*log_bn)
case 3

f grows faster than leaves
f ( n ) = Ω ( n l o g b a + k ) T ( n ) = θ ( f ( n ) ) f(n) =\Omega(n^{log_b^{a+k}})\\T(n)=\theta(f(n))


Exercise
T ( n ) = 4 T ( n 2 ) + n T(n) = 4*T(\frac{n}{2})+n

​ a = 4 b=2

n l o g b a = n 2 n^{log_b^a}=n^2

​ 符合 case 1

T ( n ) = θ ( n 2 ) T(n)=\theta(n^2)

发布了3 篇原创文章 · 获赞 4 · 访问量 220

猜你喜欢

转载自blog.csdn.net/weixin_42007043/article/details/104527707