複雜度分析

2021-10-14 05:01:35 字數 2305 閱讀 3354

複雜度分析:分析、統計演算法得執行效率和資源消耗

【注】:大 o 這種複雜度表示方法只是表示一種變化趨勢

時間複雜度分析

【注】:

它表示的是乙個演算法執行效率與資料規模增長的變化趨勢,所以不管常量的執行時間多大,我們都可以忽略掉。因為它本身對增長趨勢並沒有影響。

時間複雜度的全稱是漸進時間複雜度表示演算法的執行時間與資料規模之間的增長關係

幾種常見時間複雜度例項分析

1、o(1)

2、o(logn)、o(nlogn)

//o(log2n)i=1

;while

(i <= n)

//o(log3n)i=1

;while

(i <= n)

實際上,不管是以 2 為底、以 3 為底,還是以 10 為底,我們可以把所有對數階的時間複雜度都記為 o(logn)。為什麼呢?

我們知道,對數之間是可以互相轉換的,log3n 就等於 log32 * log2n,所以 o(log3n) = o(c * log2n),其中 c=log32 是乙個常量。基於我們前面的乙個理論:在採用大 o 標記複雜度的時候,可以忽略係數,即 o(cf(n)) = o(f(n))。所以,o(log2n) 就等於 o(log3n)。因此,在對數階時間複雜度的表示方法裡,我們忽略對數的「底」,統一表示為 o(logn)

如果一段**的時間複雜度是 o(logn),我們迴圈執行 n 遍,時間複雜度就是 o(nlogn) 了。而且,o(nlogn) 也是一種非常常見的演算法時間複雜度。比如,歸併排序、快速排序的時間複雜度都是 o(nlogn)。

3、o(m+n)、o(m*n)

m 和 n 是表示兩個資料規模。我們無法事先評估 m 和 n 誰的量級大,所以我們在表示複雜度的時候,就不能簡單地利用加法法則,省略掉其中乙個。所以,上面**的時間複雜度就是 o(m+n)。

空間複雜度分析

【注】:

空間複雜度全稱就是漸進空間複雜度(asymptotic space complexity),表示演算法的儲存空間與資料規模之間的增長關係

小結

複雜度也叫漸進複雜度,包括時間複雜度和空間複雜度,用來分析演算法執行效率與資料規模之間的增長關係,可以粗略地表示,越高階複雜度的演算法,執行效率越低。常見的複雜度並不多,從低階到高階有:o(1)、o(logn)、o(n)、o(nlogn)、o(n2 )。

什麼是複雜度分析?

資料結構和演算法解決是「如何讓計算機更快時間、更省空間的解決問題」。

因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。

分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。

複雜度描述的是演算法執行時間(或占用空間)與資料規模的增長關係

為什麼要進行複雜度分析?

和效能測試相比,複雜度分析有不依賴執行環境、成本低、效率高、易操作、指導性強的特點。

掌握複雜度分析,將能編寫出效能更優的**,有利於降低系統開發和維護成本。

如何進行複雜度分析?

大o表示法

演算法的執行時間與每行**的執行次數成正比,用t(n) = o(f(n))表示,其中t(n)表示演算法執行總時間,f(n)表示每行**執行總次數,而n往往表示資料的規模。以時間複雜度為例,由於時間複雜度描述的是演算法執行時間與資料規模的增長變化趨勢,所以常量階、低階以及係數實際上對這種增長趨勢不產決定性影響,所以在做時間複雜度分析時忽略這些項。

複雜度分析法則

1)單段**看高頻:比如迴圈。

2)多段**取最大:比如一段**中有單迴圈和多重迴圈,那麼取多重迴圈的複雜度。

3)巢狀**求乘積:比如遞迴、多重迴圈等

4)多個規模求加法:比如方法有兩個引數控制兩個迴圈的次數,那麼這時就取二者複雜度相加。

最好情況時間複雜度就是,在最理想的情況下,執行這段**的時間複雜度

最壞情況時間複雜度就是,在最糟糕的情況下,執行這段**的時間複雜度

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...