码迷,mamicode.com
首页 > 其他好文 > 详细

主定理

时间:2018-08-10 14:33:22      阅读:538      评论:0      收藏:0      [点我收藏+]

标签:导出   时间表   时间   log   大于等于   bae   归并排序   排序   omega   

ghj1222

先介绍几个符号的含义。

符号\(\Theta\),读音西塔,既是上界也是下界,等于,严格贴紧。

符号\(O\),读音殴,表示上界,小于等于,贴紧未知。

符号\(o\),读音也是殴,小于,不贴紧。

符号\(\Omega\),读音偶眯嘎,表示下界,大于等于,贴紧未知。

符号\(\omega\),读音也是偶眯嘎,表示下界,大于,不贴紧。

上面的“贴紧”是我根据tight翻译过来的(不是很准确啊),大概就是是否严格等于的意思吧。

意思就是\(\Theta\)是平均时间复杂度,\(O\)是最坏情况下的复杂度,\(\Omega\)是最好情况下的复杂度。

假设我们有递推关系式:
\(\begin{aligned}T(n)=aT\left(\frac n b\right)+f(n)\end{aligned}\)

其中,\(n\)为问题的规模、\(a\)为递推下子问题的数量,\(\begin{aligned}\frac n b\end{aligned}\)为每个子问题的规模,\(f(n)\)为递推后做的额外的计算工作。

1.假设存在常数\(\epsilon>0\),使得\(f(n)=O(n^{\log_b(a)-\epsilon})\),则\(T(n)=\Theta(n^{log_ba})\)

具体意思是f(n)的上界是n的幂次,且\(log_b(a)\)比这个幂次要大,则时间复杂度为这个n的\(log_b(a)\)次。

例子:二叉树的遍历。\(\begin{aligned}T(n)=2T\left(\frac n 2\right)+\Theta(1)\end{aligned}\)。其中\(a=2\)\(b=2\)\(f(n)=1\),此时\(\epsilon=1\)\(T(n)=\Theta(n)\)

2.假设存在常数\(k\ge0\),使得\(f(n)=\Theta (n^{\log _{b}a}\log ^{k}n)\),则\(T(n)=\Theta(n^{log_ba}\log^{k+1}n)\)

具体意思是f(n)是n的\(log_b(a)\)次,再乘以一个log,则复杂度是f(n)的复杂度再乘以一个log。

例子:归并排序。\(\begin{aligned}T(n)=2T\left(\frac n 2\right)+\Theta(n)\end{aligned}\)。其中\(a=2\)\(b=2\)\(f(n)=n\),此时\(k=0\)\(T(n)=\Theta(n\log_2n)\)

例子:二分搜索(折半搜索)。\(\begin{aligned}T(n)=T\left({\frac {n}{2}}\right)+\Theta (1)\end{aligned}\),其中\(a=1\)\(b=2\)\(f(n)=1\),此时\(k=0\),则\(T(n)=\Theta(log_2n)\)

3.假设存在常数\(\epsilon >0\) ,有\(f(n)=\Omega (n^{\log _{b}(a)+\epsilon })\),同时存在常数\(c<1\)以及充分大的\(n\)满足 \(af\left({\frac {n}{b}}\right)\leq cf(n)\)那么 \(T\left(n\right)=\Theta \left(f\left(n\right)\right)\)

这个感觉没啥用啊。。。

【例题】

【NOIP2017初赛】若某算法的计算时间表示为递推关系式:

\(\begin{aligned}T(N)=2T\left(\frac N 2\right)+N\log N\end{aligned}\)\(T(1)=1\),则该算法的时间复杂度为______________________________________________________。

\(\rm A .O(N)\ B .O(N\log_2N)\ C.O(N\log_2^2N)\ D.O(N^2)\)

【解析】套用情况2中的k=1的情况,则\(T(n)=\Theta(N\log_2^2N)\),选C

【NOIP2016初赛】若某算法的计算时间表示为递推关系式:

\(\begin{aligned}T(N)=2T\left(\frac N 4\right)+\sqrt N\end{aligned}\)\(T(1)=1\),则该算法的时间复杂度为______________________________________________________。

\(\rm A .O(N)\ B .O(\sqrt N)\ C.O(\sqrt N\log_2N)\ D.O(N^2)\)

【解析】套用情况2中的k=0的情况,则\(T(n)=\Theta(sqrt(N)\log_2N)?\),选C

【NOIP2015初赛】某算法的计算时间表示为递推关系式:

\(T(N)=T(N-1)+N\)\(T(0)=1\)。则该算法的时间复杂度为______________________________________________________。

\(\rm A .O(\log_2^2N)\ B .O(N\log_2 N)\ C.O(N)\ D.O(N^2)\)

【解析】难道这个就要用主定理了?容易推导出\(\begin{aligned}T(N)=T(0)+1+...+n=1+\frac{N*(N+1)}{2}\end{aligned}\),则时间复杂度为\(O(N^2)\),选D

【总结】

NOIP初赛考察了3年的时间复杂度分析,其中两年用到了主定理。其实你不会主定理也没事儿,只要能找几个特殊值带入,并根据符号\(O\)的意义排除选项即可。

主定理

标签:导出   时间表   时间   log   大于等于   bae   归并排序   排序   omega   

原文地址:https://www.cnblogs.com/oier/p/9454539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!