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)\)爲遞推後作的額外的計算工做。
具體意思是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)\)。
具體意思是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)\)。
這個感受沒啥用啊。。。
【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\)的意義排除選項便可。