學習數據結構和算法要從復雜度分析說起。算法復雜度包括時間復雜度和空間復雜度,兩者中又以時間復雜度相對重要,因為就 Web 應用而言,我們常見的性能優化策略都是以空間換時間,比如緩存系統就是如此。
時間復雜度表示代碼執行時間隨數據規模增長的變化趨勢,表示方法圖所示
即大O表示法,我們在分析時間復雜度的時候往往遵循以下原則:
1、只關注循環執行次數最多的一段代碼;
2、加法法則:總復雜度等於量級最大的那段代碼的復雜度;
3、乘法法則:嵌套代碼的復雜度等於嵌套內外代碼復雜度的乘積。
因此,如果分析某個算法的時間復雜度是 T(n) = O(2n+2) / T(n) = O(2n^2 +2n+3),則公式中的低階、常量、系數三部分都可以忽略,即:T(n) = O(n) / T(n) = O(n^2)。
時間復雜度里細分起來又有最好、最壞、平均情況時間復雜度之分:
1、最好情況時間復雜度就是在最理想的情況下,執行這段代碼的時間復雜度;
2、最壞情況時間復雜度就是在最糟糕的情況下,執行這段代碼的時間復雜度;
3、平均情況時間復雜度顧名思義就是結合概率論分析從最好到最壞每種情況平均下來的加權平均時間復雜度
一般而言,我們關注復雜度就夠了,只有特別嚴苛條件下或者復雜度相同的情況下,我們才會進一步區分最好、最壞、平均復雜度