天天看點

入門到入土 | Master Theorem

入門到入土 | Master Theorem

Master(

最近做初賽題,發現這些國小數學題真是一個都不會(

發現基本上每年都要考主定理,于是在這裡簡單記錄一下。

主定理主要适用于求解形如下面這個遞歸式的時間複雜度:

\[T(n)=aT(\frac{n}{b})+f(n)

\]

其中參數的含義如下:

\(n\) 是問題規模大小。

\(a\) 是原問題子問題的個數。

\(\dfrac{n}{b}\) 是每個子問題的大小,當然這裡的前提是設所有子問題的大小相等。

\(f(n)\) 是分拆子問題和合并子問題的(時間)複雜度函數。

不過就我做的這幾年的提高組初賽題來看,參數的意義實際上不太考,一般都是直接給出柿子讓你分析時間複雜度。

下面的大小比較都是漸進意義上的。

上式的複雜度分析主要如下列三種情況:

入門到入土 | Master Theorem

當然也有簡化的版本(不與上面的三種一一對應):

若 \(f(n) > \Theta(n^{\log_ba})\) 且對于足夠大的 \(n\) 和常數 \(c<1\) 有 \(af(\frac{n}{b}) \le cf(n)\),那麼 \(T(n) = \Theta(f(n)).\)

若 \(f(n) < \Theta(n^{\log_ba})\),則 \(T(n) = \Theta(n^{\log_ba}).\)

若 \(f(n) = \Theta(n^{\log_ba}\log^kn)\),則 \(T(n) = \Theta(n^{\log_ba}\log^{k+1}n)\).

Stop learning useless algorithms, go and solve some problems, learn how to use binary search.

顯然我們每次把一個問題分成兩個子問題,是以 \(a=1,b=2\),即:

\[T(n)=T(\frac{n}{2})+\Theta(1)

因為 \(\Theta(n^{\log_21}) = \Theta(1)\),是以複雜度為 \(T(n) = \Theta(n^{\log_21}\log^1n) = \Theta(\log n).\)

和二分查找類似,不過原問題的子問題個數為兩個,故 \(a=2\),同時合并子問題的時間複雜度為 \(\Theta(n)\),即:

\[T(n)=2T(\frac{n}{2})+\Theta(n)

因為 \(\Theta(n^{\log_22}) = \Theta(n)\),是以複雜度為 \(T(n) = \Theta(n\log n).\)

假設某算法的計算時間表示為遞推關系式:

\[T(n) = 2T(\frac{N}{4})+sqrt(n),T(1) = 1.

則算法的時間複雜度為( )。

因為 \(\Theta(n^{\log_42}) = \Theta(\sqrt n)\),是以 \(T(n) = \Theta(\sqrt n \log n).\)

\[T(N) = 2T(\frac{N}{2})+N\log N,T(1) = 1.

因為 \(\Theta(N^{\log_22}) = \Theta(N)\) 且 \(k=1\) 時 \(\Theta(N\log N) = \Theta(N \log^k N)\),是以 \(T(N) = \Theta(N\log^2N).\)

為了維護 CCF 的知識産權利益,本次比賽簡稱 SCP 第一輪。

\[T(n) = 3T(\frac{n}{2})+\Theta(n),T(1) = \Theta(1).

因為 \(\Theta(n^{\log_23}) > \Theta(n)\),是以 \(T(n) = \Theta(n^{\log_23}).\)

明天就是 CSP-S1 2021 了,希望各位都 RP++,AK 初賽(

希望我能進複賽(

Do you like WHAT YOU SEE ?

繼續閱讀