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)+bn(n≥2)且 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(2k−1)+g(2k)=2×(2T(2k−2)+g(2k−1))+g(2k)=2×2×(2T(2k−3))+22g(2k−2)+2g(2k−1))+g(2k)= ......=2kT(20)+i=0∑k−12ig(2k−i)=2ka+i=0∑k−12ib2k−i=2ka+bi=0∑k−12k=2ka+bk2k∵n=2k,则有k=log n=n×a+b n log n∴f(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(2i−1)+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(i−1)+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(k−1)+g(k)=22f(k−2)+2g(k−1)+g(k)= ......=2kf(0)+i=0∑k−12ig(k−i)=2ka+i=0∑k−12ib2k−i=2ka+bi=0∑k−12k=2ka+b 2k log2k∴T(n)=T(2k)=f(k)=2ka+b 2k log2k=na+b n log n=Θ(n log n)