主定理
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\)的意义排除选项即可。