递归算法求解复杂度

2、某递归算法的时间复杂度 T ( n ) T(n) T(n)满足递归方程: T ( n ) = 2 T ( n / 2 ) + b n ( n ≥ 2 ) T(n)=2T(n/2)+bn(n \geq2) T(n)=2T(n/2)+bnn2 T ( 1 ) = a T(1)=a T(1)=a,其中 n = 2 k , a , b , k n=2^k , a, b, k n=2k,a,b,k均为正整数。 T ( n ) T(n) T(n) 可用 Θ \Theta Θ表示为( )

A. Θ ( n 2 ) \Theta(n^2 ) Θ(n2)

B. Θ ( n   l o g   n ) \Theta(n\ log \ n) Θ(n log n)

C. Θ ( n   l o g 2   n ) \Theta(n\ log^2\ n) Θ(n log2 n)

D. Θ ( n 2 l o g   n ) \Theta(n^2 log \ n) Θ(n2log n)

如果你是算法大佬那就直接开挂:

想一下哪个常见的算法满足上述递归方程,然后把该算法的复杂度直接填上去即可,逆天… 这里是归并排序的递归方程,归并排序的复杂度为 Θ ( n   l o g   n ) \Theta(n\ log \ n) Θ(n log n)

常见做法在[此处](./ppt/1 算法分析的基本概念和方法.pdf)的例5.

如果我们没有这么niubility,我们需要以下解法:

解法1(展开法):

g ( n ) = b n g(n)=bn g(n)=bn,则
T ( n ) = T ( 2 k ) = 2 T ( 2 k − 1 ) + g ( 2 k ) = 2 × ( 2 T ( 2 k − 2 ) + g ( 2 k − 1 ) ) + g ( 2 k ) = 2 × 2 × ( 2 T ( 2 k − 3 ) ) + 2 2 g ( 2 k − 2 ) + 2 g ( 2 k − 1 ) ) + g ( 2 k ) =   . . . . . . = 2 k T ( 2 0 ) + ∑ i = 0 k − 1 2 i g ( 2 k − i ) = 2 k a + ∑ i = 0 k − 1 2 i b 2 k − i = 2 k a + b ∑ i = 0 k − 1 2 k = 2 k a + b k 2 k ∵ n = 2 k , 则有 k = l o g   n = n × a + b   n   l o g   n ∴ f ( n ) = Θ ( n   l o g   n ) \begin{aligned} T(n)=T(2^k)& =2T(2^{k-1})+g(2^k) \\ & = 2 \times (2T(2^{k-2})+g(2^{k-1})) +g(2^k) \\ & = 2 \times 2 \times(2T(2^{k-3}))+2^2g(2^{k-2})+2g(2^{k-1})) +g(2^k) \\ &= \ ...... \\ &=2^kT(2^0)+\sum _{i=0}^{k-1}2^{i}g(2^{k-i}) \\ &=2^{k}a+\sum _{i=0}^{k-1}2^{i}b2^{k-i} \\ &=2^{k}a+b\sum _{i=0}^{k-1}2^{k} \\ &=2^{k}a+bk2^k \\ &\because n = 2^k,则有k = log \ n \\ &=n \times a + b \ n \ log \ n \\ &\therefore f(n) = \Theta(n\ log \ n) \end{aligned} T(n)=T(2k)=2T(2k1)+g(2k)=2×(2T(2k2)+g(2k1))+g(2k)=2×2×(2T(2k3))+22g(2k2)+2g(2k1))+g(2k)= ......=2kT(20)+i=0k12ig(2ki)=2ka+i=0k12ib2ki=2ka+bi=0k12k=2ka+bk2kn=2k,则有k=log n=n×a+b n log nf(n)=Θ(n log n)
解法2(换元法):

f ( i ) = T ( 2 i ) f(i)=T(2^i) f(i)=T(2i),则由 T ( 2 i ) = 2 T ( 2 i − 1 ) + b 2 i T(2^i) = 2T(2^{i-1})+ b 2^i T(2i)=2T(2i1)+b2i可得递归关系

f ( i ) = 2 f ( i − 1 ) + b 2 i   , f ( 0 ) = T ( 1 ) = a f(i) = 2f(i-1) + b 2^i \ , f(0) = T(1) = a f(i)=2f(i1)+b2i ,f(0)=T(1)=a

g ( i ) = b 2 i g(i) = b 2^i g(i)=b2i,则:
f ( k ) = 2 f ( k − 1 ) + g ( k ) = 2 2 f ( k − 2 ) + 2 g ( k − 1 ) + g ( k ) =   . . . . . . = 2 k f ( 0 ) + ∑ i = 0 k − 1 2 i g ( k − i ) = 2 k a + ∑ i = 0 k − 1 2 i b 2 k − i = 2 k a + b ∑ i = 0 k − 1 2 k = 2 k a + b   2 k   l o g 2 k ∴ T ( n ) = T ( 2 k ) = f ( k ) = 2 k a + b   2 k   l o g 2 k = n a + b   n   l o g   n = Θ ( n   l o g   n ) \begin{aligned} f(k) & = 2f(k-1) + g(k) \\ & = 2^2f(k-2)+ 2g(k-1) + g(k) \\ & =\ ...... \\ & = 2^kf(0)+ \sum_{i=0}^{k-1} 2^i g(k-i) \\ &=2^ka+\sum_{i=0}^{k-1} 2^i b2^{k-i} \\ & = 2^ka+b \sum_{i=0}^{k-1} 2^{k} \\ & = 2^ka+b \ 2^{k} \ log 2^{k} \\ &\therefore T(n) = T(2^k) = f(k) = 2^ka+b \ 2^{k} \ log 2^{k} = na+b \ n \ log \ n =\Theta(n\ log \ n) \end{aligned} f(k)=2f(k1)+g(k)=22f(k2)+2g(k1)+g(k)= ......=2kf(0)+i=0k12ig(ki)=2ka+i=0k12ib2ki=2ka+bi=0k12k=2ka+b 2k log2kT(n)=T(2k)=f(k)=2ka+b 2k log2k=na+b n log n=Θ(n log n)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值