递归算法时间复杂度分析
等比数列和公式:
S
n
=
a
1
(
1
−
q
n
)
1
−
q
Sn = \frac{a_1(1-q^n)}{1-q}
Sn=1−qa1(1−qn)
S n = a 1 − a n q 1 − q Sn = \frac {a_1-a_nq}{1-q} Sn=1−qa1−anq
S n = q a n − a 1 q − 1 Sn = \frac{qa_n - a_1}{q-1} Sn=q−1qan−a1
example 1
T
(
n
)
=
2
∗
T
(
n
2
)
+
n
T(n)=2*T(\frac{n}{2})+n
T(n)=2∗T(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)=2∗T(2n)+n=n+n+n......+n=n∗log2n=O(n∗log2n)
example 2
T
(
n
)
=
2
∗
T
(
n
2
)
+
n
2
T(n) =2*T(\frac{n}{2}) +n^2
T(n)=2∗T(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)=2∗T(2n)+n2=n2+2n2+4n2+8n2......2log2n−1n2=n2∗1−211−(21)log2n=2n2(1−n1)=2n2−2n=O(n2)
Master method
T
(
n
)
=
a
∗
T
(
n
b
)
+
f
(
n
)
T(n)=a*T(\frac{n}{b})+f(n)
T(n)=a∗T(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)=θ(nlogba∗logbn)
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)=4∗T(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)