【cs基礎】如何判斷算法的好壞

算法複雜度

  • 平時我們說算法的好壞,排除一些軟件和硬件上的限制,怎麼去衡量這個算法運行的更快呢?這就是Big O notation的作用啦!

Big O notation

  • Big O notation是一種描述述函數漸進行爲的理論,說白了,表達算法的增長趨勢,一個算法會漸漸走向快速還是緩慢的表達方式。
  • 這種漸進表達有三種記號來表示:O、 Θ 和 Ω 記號法。Θ 記號漸進地給出了一個函數的上界和下界,當只有漸近上界時使用 O 記號,當只有漸近下界時使用 Ω 記號。

  • 譬如:

    T(n)=4n2+2n+2

    當 n 增大到非常大時,n2 項將開始占主導地位 , 一般就用O(n2) 表示該算法的上界表示算法複雜度。

算法複雜度趨勢一覽


算法的衡量從兩個方向出發:時間複雜度和空間複雜度

1. 時間複雜度

  • 算法完成其執行所需的總時間量
  • 但是!算法執行的時間我們很難真實的估計,只能比較算法語句的執行次數,以此比較時間複雜度

2. 空間複雜度

  • 算法完成其執行所需的計算機存儲器的總量
  • 說白了,就是程序執行所需要的內存空間:
    1. 指令空間:用於存儲已編譯版本指令的內存量。
    2. 環境堆棧:在函數調用時存儲部分執行函數信息的內存量。
    3. 數據空間:用於存儲所有變量和常量的內存量。

怎麼做

  • 書讀百遍,其義自見。

參考:
http://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html
http://www.ehcoo.com/complexity.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章