這陣子在認真地看著演算法導論,之前看到第四章計算分治法的時間複雜度的計算方法被稱為「主方法」,運用這個主方法可以快速地口算出分治演算法的遞迴式的時間複雜度,以下給出演算法導論裡關於主方法的描述吧,我就直接截圖
不得不說,演算法導論是一本非常偏向於數學的演算法書,裡面的對於各種演算法結論的正確性大都有著嚴格的數學上的推導。之前對於主方法的描述只是大略地看了一下,看是看懂了,但是當時沒有刻意將這個結論記下來,當我往後看遇到遞迴式求解部分的時候發覺還是忘記了主方法的求解過程,只能模糊記得部分而已,昨天晚上再複習的時候,發覺這個描述可以不用帶有讓人煩惱的 ε ,我是採用了如下的記憶方法~
對於遞迴式 $t(n) = a * t(n/b) + f(n)$
1.我們不妨設$f(n) = n^k$, 我們可以求出$ k$ 的值
2.我們再求出$\log_ a$;
3.比較$\log_ a$ 與$ k$的大小
4.如果$k >\log_ a$, 有 $t(n) = θ(f(n))$; 如果$ k
則$t(n) = \theta (\lg n * n^(\log_a))$;
比如$t(n) = 9*t(n/3) + n$;
有 $\log_ 9 = 2 $ ;$ f(n) = n^1$ 得到 $k = 1$ 有$ 2 > 1$ 即得到 $t(n) = θ(n^2)$;
這樣的方法應該會簡單點吧~ 我只是覺得算導裡面每次對於遞迴式的求解都要拿乙個ε來說事總是有點不爽的感覺,雖然這種方法失去了數學上的嚴謹證明.
如何計算演算法的時間複雜度
時間複雜度的定義 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零 的常數,則稱f n 是t n 的同數量級函式。記作t n o f n 稱o f n 為演算法的漸進 時間複雜度 o是...
如何計算演算法的時間複雜度
求解演算法的時間複雜度的具體步驟是 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能...
計算演算法複雜度
演算法的複雜度分為時間複雜度和空間複雜度 1.時間複雜度 在計算演算法複雜度時一般只用到大o符號,landau符號體系中的小o符號 符號等等比較不常用。這裡的o,最初是用大寫希臘字母,但現在都用大寫英語字母o 小o符號也是用小寫英語字母o,符號則維持大寫希臘字母 常見的演算法時間複雜度由小到大依次為...