递归算法时间复杂度

递归算法时间复杂度分析

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

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

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


example 1
T ( n ) = 2 ∗ T ( n 2 ) + n T(n)=2*T(\frac{n}{2})+n T(n)=2T(2n)+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) T(n)=2T(2n)+n=n+n+n......+n=nlog2n=O(nlog2n)


example 2
T ( n ) = 2 ∗ T ( n 2 ) + n 2 T(n) =2*T(\frac{n}{2}) +n^2 T(n)=2T(2n)+n2
在这里插入图片描述
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) T(n)=2T(2n)+n2=n2+2n2+4n2+8n2......2log2n1n2=n21211(21)log2n=2n2(1n1)=2n22n=O(n2)


Master method
T ( n ) = a ∗ T ( n b ) + f ( n ) T(n)=a*T(\frac{n}{b})+f(n) T(n)=aT(bn)+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}) f(n)=O(nlogbaδ)T(n)=θ(nlogba)
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) f(n)=θ(nlogba)T(n)=θ(nlogbalogbn)
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)) f(n)=Ω(nlogba+k)T(n)=θ(f(n))


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

​ a = 4 b=2

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

​ 符合 case 1

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值