主定理求时间复杂度
主定理内容
设
a
≥
1
a\ge1
a≥1和
b
>
1
b\gt1
b>1为常数,设
F
(
n
)
F(n)
F(n)为一函数,
T
(
n
)
T(n)
T(n)由如下递归式表示
T
(
n
)
=
a
T
(
n
b
)
+
f
(
n
)
T(n)=aT({n\over b})+f(n)
T(n)=aT(bn)+f(n)
其中
n
b
{n\over b}
bn指
⌈
n
b
⌉
\lceil{n\over b} \rceil
⌈bn⌉和
⌊
n
b
⌋
\lfloor{n\over b} \rfloor
⌊bn⌋, 可以证明,略去上下取整不会对结果造成影响。
那么 T ( n ) T(n) T(n)可能有如下的渐进界
- 若 f ( n ) < n l o g b a f(n)\lt n^{log^{a}_{b}} f(n)<nlogba, 且是多项式的小于。即, ∃ ϵ > 0 \exists\ \epsilon \gt 0 ∃ ϵ>0,有 f ( n ) = O ( n l o g b a − ϵ ) f(n) = O(n^{log^{a}_{b}-\epsilon}) f(n)=O(nlogba−ϵ),则 T ( n ) = θ ( n l o g b a ) T(n)= \theta(n^{log^{a}_{b}}) T(n)=θ(nlogba)
- 若 f ( n ) = n l o g b a f(n)= n^{log^{a}_{b}} f(n)=nlogba,则 T ( n ) = θ ( n l o g b a l o g n ) T(n)= \theta(n^{log^{a}_{b}}logn) T(n)=θ(nlogbalogn)
- 若 f ( n ) > n l o g b a f(n)\gt n^{log^{a}_{b}} f(n)>nlogba, 且是多项式的大于。即, ∃ ϵ > 0 \exists\ \epsilon \gt 0 ∃ ϵ>0,有 f ( n ) = O ( n l o g b a + ϵ ) f(n) = O(n^{log^{a}_{b}+\epsilon}) f(n)=O(nlogba+ϵ),对于 ∀ c < 1 \forall \ c\lt 1 ∀ c<1与所有足够大的 n n n,有 a f ( n b ) ≤ c f ( n ) af({n\over b}) \le cf(n) af(bn)≤cf(n),则 T ( n ) = θ ( f ( n ) ) T(n)=\theta(f(n)) T(n)=θ(f(n))
应用
假设某算法的计算时间表示为递推关系式
T
(
n
)
=
2
T
(
n
4
)
+
s
q
r
t
(
n
)
T(n)=2T({n\over4 })+sqrt(n)
T(n)=2T(4n)+sqrt(n)
T
(
1
)
=
1
T(1)=1
T(1)=1
则该算法的时间复杂度为多少?
分析:
T
(
n
)
T(n)
T(n)递推关系式结合主定理
a
=
2
a=2
a=2,
b
=
4
b=4
b=4,
n
l
o
g
b
a
=
n
l
o
g
4
2
=
s
q
r
t
(
n
)
n^{log^{a}_{b}} = n^{log^{2}_{4}} = sqrt(n)
nlogba=nlog42=sqrt(n), 符合情况2,
所以
T
(
n
)
=
θ
(
n
l
o
g
b
a
l
o
g
n
)
=
θ
(
n
l
o
g
4
2
l
o
g
n
)
=
θ
(
n
l
o
g
n
)
T(n)= \theta(n^{log^{a}_{b}}logn) = \theta(n^{log^{2}_{4}}logn)=\theta(\sqrt nlogn)
T(n)=θ(nlogbalogn)=θ(nlog42logn)=θ(nlogn)