主定理
参考博客如标题
自己的傻b理解
对于我这种应付考试的人,可以直接代入几个特殊值...
只需要知道:
符号\(O\),读音殴,表示上界,小于等于,贴紧未知。
找好特殊值
对于简单的(如:O(n), 又如下面的例题3),自己推就行
博客原文如下
先介绍几个符号的含义。
符号\(Θ\),读音西塔,既是上界也是下界,等于,严格贴紧。
符号\(O\),读音殴,表示上界,小于等于,贴紧未知。
符号\(o\),读音也是殴,小于,不贴紧。
符号\(Ω\),读音偶眯嘎,表示下界,大于等于,贴紧未知。
符号\(ω\),读音也是偶眯嘎,表示下界,大于,不贴紧。
上面的“贴紧”是我根据tight翻译过来的(不是很准确啊),大概就是是否严格等于的意思吧。
意思就是\(Θ\)是平均时间复杂度,\(O\)是最坏情况下的复杂度,\(Ω\)是最好情况下的复杂度。
假设我们有递推关系式:
\(T(n)=aT(n/b)+f(n)\)
其中,\(n\)为问题的规模、\(a\)为递推下子问题的数量,\(n/b\)为每个子问题的规模,\(f(n)\)为递推后做的额外的计算工作。
1.假设存在常数ϵ>0 ,使得\(f(n)=O(n^{logb(a)−ϵ})\),则\(T(n)=Θ(n^{logba})\)。
具体意思是f(n)的上界是n的幂次,且\(logb(a)\)比这个幂次要大,则时间复杂度为这个n的\(logb(a)\)次。
例子:二叉树的遍历。\(T(n)=2T(n/2)+Θ(1)\)。其中\(a=2,b=2f(n)=1\),此时ϵ=1。
\(T(n)=Θ(n)\)。
2.假设存在常数\(k≥0\),使得\(f(n)=Θ(n^{logba}log^kn)\),则\(T(n)=Θ(n^{logba} log^{k+1}n)\)。
具体意思是f(n)是n的\(logb(a)\)次,再乘以一个\(log\),则复杂度是\(f(n)\)的复杂度再乘以一个\(log\)。
例子:归并排序。\(T(n)=2T(n2)+Θ(n)\)。其中\(a=2,b=2,f(n)=n\),此时k=0。
\(T(n)=Θ(nlog2n)\)。
例子:二分搜索(折半搜索)。\(T(n)=T(n2)+Θ(1)\),其中\(a=1,b=2,f(n)=1\),此时k=0,则
\(T(n)=Θ(log2n)\)。
3.假设存在常数ϵ>0,有\(f(n)=Ω(nlogb(a)+ϵ)\),同时存在常数\(c<1\)以及充分大的n满足$ af(n/b)≤cf(n)$那么 \(T(n)=Θ(f(n))\)。
这个感觉没啥用啊。。。
【例题】
1【NOIP2017初赛】若某算法的计算时间表示为递推关系式:
\(T(N)=2T(N/2)+NlogN,T(1)=1\),则该算法的时间复杂度为______________________________________________________。
A.\(O(N)\) B.\(O(NlogN)\) C.\(O(NlogN)\) D.\(O(N^2)\)
【解析】套用情况2中的\(k=1\)的情况,则\(T(n)=Θ(NlogN)\),选C
2【NOIP2016初赛】若某算法的计算时间表示为递推关系式:
\(T(N)=2T(N4)+N−−√,T(1)=1\),则该算法的时间复杂度为______________________________________________________。
A.\(O(N)\) B.\(O(√N)\) C.\(O(√N log2N)\) D.\(O(N^2)\)
【解析】套用情况2中的k=0的情况,则$T(n)=Θ(sqrt(N)log2 N) $,选C
3【NOIP2015初赛】某算法的计算时间表示为递推关系式:
\(T(N)=T(N−1)+N\) ,T(0)=1 。则该算法的时间复杂度为______________________________________________________。
A.\(O(log22N)\) B.\(O(Nlog2N)\) C.\(O(N)\) D.\(O(N^2)\)
【解析】难道这个就要用主定理了?容易推导出\(T(N)=T(0)+1+...+n=1+N∗(N+1)2\) ,则时间复杂度为$O(N^2) $,选D
【总结】
NOIP初赛考察了3年的时间复杂度分析,其中两年用到了主定理。其实你不会主定理也没事儿,只要能找几个特殊值带入,并根据符号O的意义排除选项即可。