主定理
符号Θ ,既是上界也是下界,等于。
符号O ,表示上界,时间复杂度小于等于该值。
符号Ω ,表示下界,时间复杂度大于等于该值。
意思就是Θ 是平均时间复杂度,O 是最坏情况下的复杂度,Ω 是最好情况下的复杂度。
假设我们有递推关系式(算法的计算复杂度):
T(n)=aT(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(nlogb(a)−ϵ)f(n)=O(n^{log_{b}(a)−ϵ})f(n)=O(nlogb(a)−ϵ) 即f(n)<nlogb(a)f(n)<n^{log_b(a)}f(n)<nlogb(a),且为多项式级别,则T(n)=Θ(nlogba)T(n)=Θ(n^{log_{b}a})T(n)=Θ(nlogba)
具体意思是f(n)的上界是n的幂次,且logb(a)log_b(a)logb(a) 比这个幂次要大,则时间复杂度为这个n的 logb(a)log_b(a)logb(a) 次。
例子:二叉树的遍历。T(n)=2T(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)=Θ(nlogbalogkn)f(n)=Θ(n^{log_ba}log^kn)f(n)=Θ(nlogbalogkn) 即f(n)=nlogb(a)f(n)=n^{log_b(a)}f(n)=nlogb(a),则T(n)=Θ(nlogbalogk+1n)T(n)=Θ(n^{log_ba}log^{k+1}n)T(n)=Θ(nlogbalogk+1n)
具体意思是f(n)是n的 logb(a)logb(a)logb(a) 次,再乘以一个logknlog^knlogkn,则复杂度是*f(n)*的复杂度再乘以一个logknlog^knlogkn。
例子:归并排序。T(n)=2T(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)=Θ(nlog2n)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)=Θ(log2n)T(n)=Θ(log_2n)T(n)=Θ(log2n) 。

本文深入讲解了算法分析中的主定理,包括Θ、O、Ω符号的含义,以及递推关系式的三种情况分析,适用于理解不同算法的时间复杂度。

3636

被折叠的 条评论
为什么被折叠?



