演算法(algorithm)指用來運算元據、解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。
主要從演算法所占用的「時間」和「空間」兩個維度去考量。
時間維度:是指執行當前演算法所消耗的時間,我們通常用「時間複雜度」來描述。
空間維度:是指執行當前演算法需要占用多少記憶體空間,我們通常用「空間複雜度」來描述。
演算法的效率主要是看它的時間複雜度和空間複雜度情況。然而,有的時候時間和空間卻又是魚和熊掌,不可兼得的,使用者需要根據實際需求取捨。
比如threadlocal就是空間換取時間,多執行緒就是時間換空間,雖然它們不涉及演算法,但思想是想通的。
演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很好反映出演算法的優劣與否。
為了簡便,我們一般在計算時間複雜度往往選取最簡單的f(n)表示。例如:
,一般都只用
表示就可以了。也就是說,兩個演算法的時間頻度不一樣,但很有可能擁有相同的時間複雜度。
例如:與
它們的頻度不同,但時間複雜度相同,都為
。常見的演算法時間複雜度由小到大依次為:
演算法時間複雜度和空間複雜度
在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進行分析t n 隨著n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作 t n o f n 它表示隨著問題規模n的增大,演算法執行時間的增長率和f n 的增長率相同,稱作演算法的漸近時間複雜度,簡稱...
演算法時間複雜度和空間複雜度
執行演算法所需要的時間 空間複雜度 執行演算法所需要的記憶體空間 常見時間複雜度 例如 常數階o 1 線性階o n 平方階o n 2 立方階o n 3 對數階o log2n nlog2n階o nlog2n 指數階o n n 效率從大到小 o 1 o log2n o n o nlog2n o n 2 ...
演算法時間複雜度和空間複雜度
為了在函式之間建立一種相對的級別,我們通過比較其相對增長率有以下兩個定義 如果存在正常數c和n0使得當n n0時t n cf n 則記為t n o f n 即f n 增長率大於等於t n f n 是其上界 如果存在正常數c和n0使得當n n0時t n cf n 則記為t n f n 即f n 增長率...