1. 算法優劣評判的標準算法
算法是解決問題的方法,而一個問題能夠有多個算法。咱們何以比較算法的優劣呢?寫過代碼的都知道,編寫代碼時能夠在易讀性、健壯性、可維護性、可擴展性等方便評判程序的優劣,但是對於算法這些都不是最關鍵的方面,算法的核心和靈魂是效率。道理淺顯易懂,若是你算法編寫的再易讀、代碼再漂亮,可是解決一個問題,須要若干年纔有結果,試問這樣的算法還有什麼意義?編程
2. 如何表示算法的效率數組
算法的時間複雜性(time complexity)分析是一種事前分析估算的方法,它是對算法所消耗資源的一種漸進分析方法。所謂的漸進分析法就是忽略了編程語言、具體的機器、編譯器的影響,只關注輸入規模增大時算法運行時間增大的規模趨勢。編程語言
3. 輸入規模和基本語句函數
撇開計算機硬件配置的影響,影響算法時間代價的最主要因素是輸入規模。例如查找1000之內全部的素數,這裏的輸入規模就是1000;對N個整數進行排序,這裏的N就是輸入規模。排序
想要精確表示算法的運行時間函數經常是很困難的,考慮到算法的主要目的在於比較求解同一個問題的不一樣算法的效率,能夠用算法中的基本語句的執行次數來度量算法的工做量。基本語句(basic statment)是執行次數與整個算法的執行次數成正比的語句,基本語句對算法運行時間貢獻最大,是算法中的重要操做。資源
以冒泡排序算法爲例,對一個長度爲n的數組進行冒泡排序,它的實現過程能夠描述爲如下步驟:編譯器
1. 第一趟排序:取第一個值和第二個值比較,若是第一個值大於第二個值,則交換位置,不然不作變更;而後第二個值和第三個值做比較,如此進行n-1次後,能夠確保數組最後一個值爲數組中最大的值。所以第二趟比較時,最後一個值無需參加比較。it
2. 第二趟排序:跟第一趟相似,只是最後一個值無需再作比較,所以只需n-2趟排序。編譯
3. 重複上述步驟,重複n-1趟後,冒泡排序完成。
咱們須要對長度爲n的數組進行排序,所以這個算法裏的輸入規模爲 n,而這個算法的基本語句是 前值和後值的比較(a[i]>a[i+1])。所以,咱們來分析這樣的比較語句被執行了多少次,就能夠分析出這個算法的時間複雜性。第一趟排序,n個值比較大小,能夠推算出語句執行了n-1次;第二趟,最後一個值無需再參與比較,所以執行了n-2次;當比較了n-1趟時,還剩一個最小值,無需在作比較,所以總共比較了[(n-1)+(n-2)+(n-3)+......+(n-n+1) ]趟;是一個等差數列求和的問題,計算可得:[(n-1+1)(n-1)]/2=;取指數最先項,可得,冒泡排序得時間複雜性爲:O(
)。