算法複雜度
- 平時我們說算法的好壞,排除一些軟件和硬件上的限制,怎麼去衡量這個算法運行的更快呢?這就是Big O notation的作用啦!
Big O notation
- Big O notation是一種描述述函數漸進行爲的理論,說白了,表達算法的增長趨勢,一個算法會漸漸走向快速還是緩慢的表達方式。
這種漸進表達有三種記號來表示:O、 Θ 和 Ω 記號法。Θ 記號漸進地給出了一個函數的上界和下界,當只有漸近上界時使用 O 記號,當只有漸近下界時使用 Ω 記號。
譬如:
T(n)=4n2+2n+2 當 n 增大到非常大時,
n2 項將開始占主導地位 , 一般就用O(n2) 表示該算法的上界表示算法複雜度。
算法的衡量從兩個方向出發:時間複雜度和空間複雜度
1. 時間複雜度
- 算法完成其執行所需的總時間量
- 但是!算法執行的時間我們很難真實的估計,只能比較算法語句的執行次數,以此比較時間複雜度
2. 空間複雜度
- 算法完成其執行所需的計算機存儲器的總量
- 說白了,就是程序執行所需要的內存空間:
- 指令空間:用於存儲已編譯版本指令的內存量。
- 環境堆棧:在函數調用時存儲部分執行函數信息的內存量。
- 數據空間:用於存儲所有變量和常量的內存量。
怎麼做
- 書讀百遍,其義自見。
參考:
http://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html
http://www.ehcoo.com/complexity.html