本節主要解說的是算法的複雜度。算法
算法的性能分爲三種:數組
最佳狀況:計算時間最短的狀況性能
最差狀況:計算時間最長的狀況優化
平均狀況:隨機輸入的指望開銷spa
最佳狀況是1,因爲第一次就有可能找到需要找的整數。設計
最差狀況是logN開發
平均狀況是logN數學
算法複雜度用於定義問題的難度,另外也有助於開發最優化的算法,算法複雜度可以經過分析最壞狀況來下降輸入數據對算法性能的影響。class
爲了簡化問題難度的表示方法,算法複雜度下降了算法分析的細節,忽略常數係數。循環
所謂的最佳算法就是在不論什麼狀況下都能保證執行時間在理論範圍內,而且沒有更好的算法能夠超越。
常見的表示方法有比方O(N^2)表示算法最大可能的複雜度,Ω(N^2)表示最小可能的複雜度,Θ(N^2)表示算法複雜度的增加狀況。
問題描寫敘述:推斷一個數組中有多少個0。
以暴力方法爲例。
這個問題中性能上限就是指某個特定的算法能實現的複雜度。
算法下限就是通過數學方法的證實,最優算法的複雜度是Ω(N)。因爲數組中每個元素都有多是0,必須要循環整個數組才幹得出結果。
最優算法:這個問題中暴力算法就是最優算法,因此最優算法的複雜度爲Θ(N^2)。
開發一個算法
證實最低下限
假設開發出的算法複雜度和證實得出的最低複雜度不相符的話,可以去尋找新的算法。也有多是證實出錯,固然證實出錯的狀況是比較少見的。
1970年代是算法設計的黃金年代。
關於算法複雜度有下面誤區:
太在意最壞狀況。事實上實際應用中最壞狀況基本上不會出現。
試圖經過提升複雜度的常數係數來提升性能。
將大O當成近似複雜度,事實上真正的近似複雜度稱之爲波浪記法。