設a和b為常數,a>=1,b>1,
t(n) = at(n/b) + f(n) 為遞迴問題的表示形式,
n為問題的規模,b為子問題的規模,a為子問題數,f(n)為劃分與合併的時間開銷。
令g(n) = at(n/b)。
按如下三種情況進行估算:
1、如果g(n)的時間複雜度大於f(n),則t(n) = o(nlogb a );
2、如果g(n)的時間複雜度大等於f(n),則t(n) = o(nlogb a lgn);
3、如果g(n)的時間複雜度小於f(n),則t(n) = o(f(n))。
也就是說,g(n)和f(n)誰的時間複雜度高,誰就起決定性作用;相同則再乘以lgn。
參考《演算法導論》中的master theorem。
剖析遞迴行為和遞迴行為時間複雜度的估算
乙個遞迴行為的例子 master公式的使用 t n a t n b o n d t n 是樣本量為n時的時間複雜度,n b是劃分成子問題的樣本量,子問題發生了a次,後面o n d 是除去呼叫子過程之外的時間複雜度。比如要求乙個陣列的最大值 public static int getmax int a...
剖析遞迴行為和遞迴行為時間複雜度的估算
乙個遞迴行為的例子 master公式的使用 t n a t n b o n d t n 是樣本量為n時的時間複雜度,n b是劃分成子問題的樣本量,子問題發生了a次,後面o n d 是除去呼叫子過程之外的時間複雜度。比如要求乙個陣列的最大值 public static int getmax int a...
遞迴演算法時間複雜度
開篇前言 為什麼寫這篇文章?筆者目前在學習各種各樣的演算法,在這個過程中,頻繁地碰到到遞迴思想和分治思想,驚訝於這兩種的思想的偉大與奇妙的同時,經常要面對的乙個問題就是,對於乙個給定的遞迴演算法或者用分治思想縮小問題規模的演算法,如何求解這個演算法的時間複雜度呢?在google過很多的博文後,感覺這...