初賽 主定理(時間複雜度)

2022-09-04 23:12:20 字數 1524 閱讀 4944

主定理:

對於\(t(n)=at(\dfrac)+f(n),t(1)=o(1)\),有:

\(f(n)=o(n^)\),\(\epsilon>0\)時,\(t(n)=\theta(n^)\)

\(f(n)=\theta(n^\log_b^l n)\)時,\(t(n)=\theta(n^\log_b^ n)\)

\(f(n)=\omega(n^)\),\(\epsilon>0\)且有一實數\(c\)滿足\(0時,\(t(n)=\theta(f(n))\)。

對於\(t(n)=at(\dfrac)+f(n),t(1)=o(1)\)的式子,我們假設\(n=b^k,k\)為正整數,則有:

\(t(n)=at(\dfrac)+f(n)\)

\(=a(at(\dfrac)+f(\dfrac))+f(n)\)

\(=a^2t(\dfrac)+af(\dfrac)+f(n)\)

\(=a^3t(\dfrac)+a^2f(\dfrac)+af(\dfrac)+f(n)\)

\(=a^k\times t(1)+\sum\limits_^a^jf(\dfrac)\)

\(=a^+\sum\limits_^a^jf(\dfrac)\)

\(=n^+\sum\limits_^a^jf(\dfrac)\)

上一步是由\(a^=(b^)^=b^=(b^)^=c^\)得到的。

接下來研究\(t(n)-n^\)即可,不妨設其為\(t(n)\)。

\(t(n)=\sum\limits_^a^jf(\dfrac)\)

\(=\sum\limits_^a^j(\dfrac)^\)

\(=n^\sum\limits_^\dfrac}\)

\(=n^\sum\limits_^\dfrac}}\)

\(=n^\sum\limits_^b^\)

\(=n^(\dfrac-1})\)

\(=n^(\dfrac-1})\)

\(=\dfrac-n^}\)

所以\(t(n)=\theta(n^)\),所以\(t(n)=\theta(n^)\)

\(t(n)=\sum\limits_^a^jf(\dfrac)\)

\(=\sum\limits_^a^j(\dfrac)^\log_b^l\dfrac\)

\(=n^\sum\limits_^\dfrac}\log_b^l\dfrac\)

\(=n^\sum\limits_^(k-j)^l\)

\(\leq n^k^\)

\(=n^\log_b^ n\)

所以\(t(n)=\theta(n^\log_b^ n)\)

\(t(n)=\sum\limits_^a^jf(\dfrac)\)

\(\leq \sum\limits_^c^jf(n)=f(n)\sum\limits_^c^j\)

\(\leq f(n)\sum\limits_^c^j\)

\(=\dfrac\leq f(n)\)

所以\(t(n)=\theta(f(n))\),且\(t(n)>o(n^)\),所以\(t(n)=\theta(f(n))\)

主定理與時間複雜度

只好在網上找了一篇看起來不怎麼嚴謹的部落格,不過算出來的是對的?那就預設是對的吧qwq 如果我們要解決規模為 n 的問題,通過分治,得到 a 個規模為 frac 的問題,每次的額外複雜度為 o n d t n at frac c n d begin t left n right begino lef...

主定理與時間複雜度

只好在網上找了一篇看起來不怎麼嚴謹的部落格,不過算出來的是對的?那就預設是對的吧qwq 如果我們要解決規模為 n 的問題,通過分治,得到 a 個規模為 frac 的問題,每次的額外複雜度為 o n d t n at frac c n d begin t left n right begino lef...

主定理求解演算法時間複雜度

所謂主定理,就是用來解遞迴方程的一種方法,此方法可以用來求解大多數遞迴方程。設遞迴方程為t n at n b f n 其中a 1,b 1 主定理 1.如果存在常數 0有f n o n logb a 則t n n logb a 2.若f n n logb a 則t n n logb a logn2 n...