主定理:
對於\(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...