主定理
符号Θ ,既是上界也是下界,等于。
符号O ,表示上界,时间复杂度小于等于该值。
符号Ω ,表示下界,时间复杂度大于等于该值。
意思就是Θ 是平均时间复杂度,O 是最坏情况下的复杂度,Ω 是最好情况下的复杂度。
假设我们有递推关系式(算法的计算复杂度):
T
(
n
)
=
a
T
(
n
/
b
)
+
f
(
n
)
T(n)=aT(n/b)+f(n)
T(n)=aT(n/b)+f(n)
其中,n 为问题的规模,a 为递推下子问题的数量, n/b 为每个子问题的规模,f(n) 为递推后做的额外的计算工作。
1.设存在常数ϵ>0 ,使得 f ( n ) = O ( n l o g b ( a ) − ϵ ) f(n)=O(n^{log_{b}(a)−ϵ}) f(n)=O(nlogb(a)−ϵ) 即 f ( n ) < n l o g b ( a ) f(n)<n^{log_b(a)} f(n)<nlogb(a),且为多项式级别,则 T ( n ) = Θ ( n l o g b a ) T(n)=Θ(n^{log_{b}a}) T(n)=Θ(nlogba)
具体意思是f(n)的上界是n的幂次,且 l o g b ( a ) log_b(a) logb(a) 比这个幂次要大,则时间复杂度为这个n的 l o g b ( a ) log_b(a) logb(a) 次。
例子:二叉树的遍历。 T ( n ) = 2 T ( n / 2 ) + Θ ( 1 ) T(n)=2T(n/2)+Θ(1) T(n)=2T(n/2)+Θ(1) 。其中a=2, b=2,f(n)=1 ,此时ϵ=1 。 T ( n ) = Θ ( n ) T(n)=Θ(n) T(n)=Θ(n) 。
2.设存在常数k≥0 ,使得 f ( n ) = Θ ( n l o g b a l o g k n ) f(n)=Θ(n^{log_ba}log^kn) f(n)=Θ(nlogbalogkn) 即 f ( n ) = n l o g b ( a ) f(n)=n^{log_b(a)} f(n)=nlogb(a),则 T ( n ) = Θ ( n l o g b a l o g k + 1 n ) T(n)=Θ(n^{log_ba}log^{k+1}n) T(n)=Θ(nlogbalogk+1n)
具体意思是f(n)是n的 l o g b ( a ) logb(a) logb(a) 次,再乘以一个 l o g k n log^kn logkn,则复杂度是*f(n)*的复杂度再乘以一个 l o g k n log^kn logkn。
例子:归并排序。 T ( n ) = 2 T ( n / 2 ) + Θ ( n ) T(n)=2T(n/2)+Θ(n) T(n)=2T(n/2)+Θ(n) 。其中a=2, b=2, f(n)=n,此时k=0 。 T ( n ) = Θ ( n l o g 2 n ) T(n)=Θ(nlog_2n) T(n)=Θ(nlog2n) 。
例子:二分搜索(折半搜索)。 T ( n ) = T ( n / 2 ) + Θ ( 1 ) T(n)=T(n/2)+Θ(1) T(n)=T(n/2)+Θ(1) ,其中a=1,b=2,f(n)=1,此时k=0 ,则 T ( n ) = Θ ( l o g 2 n ) T(n)=Θ(log_2n) T(n)=Θ(log2n) 。