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\)的意義排除選項即可。