用递归树求复杂度

一、问题描述

eg. T ( n ) = 3 T ( n 4 ) + c n 2 T(n) = 3T(\frac{n}{4})+cn^2 T(n)=3T(4n)+cn2

用递归树求其时间复杂度。

图例

请添加图片描述

关于递归树的深度

deep = log ⁡ 4 n + 1 \log_4{n} + 1 log4n+1

深度为 i i i的节点对应规模为   n 4 i \ \frac{n}{4^i}  4in的子问题,所以当 n / 4 i = 1 n / 4^i = 1 n/4i=1 时,递归树到达底层,子问题规模变为1,

此时, i = log ⁡ 4 n i = \log_4n i=log4n ,所以递归树有 log ⁡ 4 n + 1 \log_4{n} + 1 log4n+1层。

关于代价

i = 0 , 1 , 2 , . . . , log ⁡ 4 n + 1 i = 0,1,2,..., \log_4{n} + 1 i=0,1,2,...,log4n+1 , 深度为 i i i,节点个数为   3 i \ 3^i  3i个,每个节点的代价为 c ( n 4 i ) 2 c(\frac{n}{4^i})^2 c(4in)2 ,则深度为 i i i的所有节点的总代价为 ( 3 16 ) i c n 2 (\frac{3}{16})^icn^2 (163)icn2 , 树的最低层深度为 log ⁡ 4 n \log_4n log4n,有 3 log ⁡ 4 n 3^{\log_4{n}} 3log4n个节点,而

3 log ⁡ 4 n = 3 l g n l g 4 = 3 l g n l g 3 l g 3 l g 4 = 3 log ⁡ 3 n   ∗   log ⁡ 4 3 = n log ⁡ 4 3 3^{\log_4{n}} = 3^{\frac{lg n}{lg 4}} = 3^{\frac{lg n}{lg 3}\frac{lg 3}{lg 4}} = 3^{\log_3n \ * \ \log_43} = n^ {\log_43} 3log4n=3lg4lgn=3lg3lgnlg4lg3=3log3n  log43=nlog43 ,

最底层每个节点的代价为 T ( 1 ) T(1) T(1),总代价为   n log ⁡ 4 3 T ( 1 ) \ n^ {\log_43} T(1)  nlog43T(1),即 Θ ( n log ⁡ 4 3 ) \Theta(n^ {\log_43} ) Θ(nlog43) , 综上,我们有:

T ( n ) = c n 2 + 3 16 c n 2 + ( 3 16 ) 2 c n 2 + . . . + ( 3 16 ) log ⁡ 4 ( n − 1 ) c n 2 + Θ ( n log ⁡ 4 3 ) T(n) = cn^2 + \frac{3}{16}cn^2 + (\frac{3}{16})^2cn^2 + ... + (\frac{3}{16})^{\log_4{(n-1)}}cn^2 + \Theta (n^ {\log_43}) T(n)=cn2+163cn2+(163)2cn2+...+(163)log4(n1)cn2+Θ(nlog43)
T ( n ) = ∑ i = 0 log ⁡ 4 ( n − 1 ) ( 3 16 ) i c n 2 + Θ ( n log ⁡ 4 3 ) < ∑ i = 0 ∞ ( 3 16 ) i c n 2 + Θ ( n log ⁡ 4 3 ) T(n) = \sum\limits_{i=0}^{\log_4(n-1)} (\frac{3}{16})^icn^2 + \Theta(n^ {\log_43} ) < \sum\limits_{i=0}^{ \infty } (\frac{3}{16})^icn^2 + \Theta(n^ {\log_43} ) T(n)=i=0log4(n1)(163)icn2+Θ(nlog43)<i=0(163)icn2+Θ(nlog43)
= 16 13 c n 2 + Θ ( n log ⁡ 4 3 ) = \frac{16}{13}cn^2 + \Theta(n^ {\log_43} ) =1316cn2+Θ(nlog43)
= O ( n 2 ) = O(n^2) =O(n2)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值