主定理

ghj1222算法

先介紹幾個符號的含義。spa

符號\(\Theta\),讀音西塔,既是上界也是下界,等於,嚴格貼緊。翻譯

符號\(O\),讀音毆,表示上界,小於等於,貼緊未知。排序

符號\(o\),讀音也是毆,小於,不貼緊。class

符號\(\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\)的意義排除選項便可。

相關文章
相關標籤/搜索