1.資料結構和演算法解決是「如何讓計算機更快時間、更省空間的解決問題」。
2.因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。
3.分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。
4.複雜度描述的是演算法執行時間(或占用空間)與資料規模的增長關係。
1.和效能測試相比,複雜度分析有不依賴執行環境(測試環境中硬體的不同會對測試結果有很大的影響)、成本低、效率高、易操作、指導性強的特點。
2.掌握複雜度分析,將能編寫出效能更優的**,有利於降低系統開發和維護成本。
1.大o表示法
1)**
演算法的執行時間與每行**的執行次數成正比,用t(n) = o(f(n))表示,其中t(n)表示演算法執行總時間,f(n)表示每行**執行總次數,而n往往表示資料的規模。公式中的o,表示**的執行時間t(n)與f(n)表示式成正比。這就是大 o 時間複雜度表示法。
2)特點
以時間複雜度為例,由於時間複雜度描述的是演算法執行時間與資料規模的增長變化趨勢,所以常量階、低階以及係數實際上對這種增長趨勢不產決定性影響,所以在做時間複雜度分析時忽略這些項。
2.複雜度分析法則
1)單段**看高頻:比如迴圈。
2)多段**取最大:比如一段**中有單迴圈和多重迴圈,那麼取多重迴圈的複雜度。
3)巢狀**求乘積:比如遞迴、多重迴圈等
4)多個規模求加法:比如方法有兩個引數控制兩個迴圈的次數,那麼這時就取二者複雜度相加。
多項式階:隨著資料規模的增長,演算法的執行時間和空間占用,按照多項式的比例增長。包括(按數量級遞增):
非多項式階:隨著資料規模的增長,演算法的執行時間和空間占用暴增,這類演算法效能極差。包括,
總結:複雜度也叫漸進複雜度,包括時間複雜度和空間複雜度,用來分析演算法執行效率與資料規模之間的增長關係,可以粗略地表示,越高階複雜度的演算法,執行效率越低。常見的複雜度並不多,從低階到高階有:o(1)、o(logn)、o(n)、o(nlogn)、o(n^2)。
幾種複雜度分析圖:
資料結構與演算法系列二(複雜度分析)
有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的 不也能 飛 起來嗎?於是問題來了 為什麼還要學習資料結構與演算法呢?理由一 面試的時候,千萬不要被資料結構與演算法拖了後腿 ...
資料結構與演算法系列 時間 空間複雜度
資料結構和演算法本質就是幫我們用最快的時間和最少的空間來執行我們的 所以,執行效率是衡量乙個演算法的非常重要的指標。那如何來計算你的演算法 的執行效率呢?這就需要時間 空間複雜度來分析了。有人可能會說,我把 執行一遍,然後通過統計 監控就能知道執行的時間和需要的記憶體大小。幹嘛還需要時間 空間複雜度...
資料結構與演算法 複雜度分析
一 什麼是複雜度分析?1.資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2.因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3.分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。4.複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...