一、问题描述
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(n−1)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=0∑log4(n−1)(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)