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

2021-10-09 07:11:49 字數 1270 閱讀 1132

演算法是指用來運算元據、解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。

那麼我們應該如何去衡量不同演算法之間的優劣呢?

主要還是從演算法所占用的「時間」和「空間」兩個維度去考量。

接下來主要介紹時間複雜度和空間複雜度的計算方法。

一、時間複雜度

o 時間複雜度並不具體表示**真正的執行時間,而是表示**執行時間隨資料規模增長的變化趨勢,當n變得越來越大時,公式中的低階,常量,係數三部分影響不了其增長趨勢,所以可以直接忽略他們,只記錄乙個最大的量級就可以了。以下介紹幾種常見的時間複雜度量級。

1.常數階 o(1)

o(1)不是說**只有一行,這個1它代表的是乙個常量,即使它有一萬行這樣的也是o(1),因為它是固定的不會變化(也就是常量),所以凡是常量級複雜度**,均記為o(1)

2.線性階 o(n)

一般乙個迴圈的時間複雜度為o(n):for迴圈裡面的**會執行n遍,因此它消耗的時間是隨著n的變化而變化的,因此這類**都可以用o(n)來表示它的時間複雜度。

3.平方階 o(n*n)

一般迴圈巢狀(即乙個for迴圈裡面還有乙個for迴圈)的時間複雜度為o(n*n)

4.o(log n)、o(n*log n)

一般乙個迴圈中迴圈變數是以倍數(如 i = i *2)變化的,時間複雜度為o(log n):因為這個迴圈只迴圈 log n 次。

o(n*log n)一般是複雜度為o(log n)的迴圈巢狀乙個複雜度為o(n)的迴圈。 

注:以上時間複雜度大小為 1 < log n < n < n*log n < n*n 。 對於乙個具體演算法來說,時間複雜度越小越好。

二、空間複雜度

時間複雜度不是用來計算程式具體耗時的,空間複雜度也不是用來計算程式實際占用的空間的。

空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的乙個量度,同樣反映的是乙個趨勢。

空間複雜度比較常用的有:o(1)、o(n)、o(n²)

1. o(1)

如果演算法執行所需要的臨時空間不隨著某個變數n的大小而變化,即此演算法空間複雜度為乙個常量,可表示為 o(1)

2.o(n)

一般演算法需要建立大小為n的陣列時的空間複雜度為o(n)

注:如今硬體條件已經很好,所以現在演算法一般只考慮時間複雜度。

以上為常見的時間和空間複雜度分析,另外還有最好、最壞和平均時間複雜度。此外,遞迴演算法(演算法**現自己呼叫自己的成分)的時間複雜度、空間複雜度不同於上述。

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

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

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

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

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

如何評價一段 或演算法的效能和好壞?目前衡量 質量的指標主要有兩個 分別為時間複雜度和空間複雜度。其中時間複雜度指的是執行當前演算法所消耗的時間,空間複雜度指的是指執行當前演算法需要占用多少記憶體空間。有的時候時間和空間是不可兼得的,需要從中去取乙個平衡點。下面簡單描述一下如何計算時間複雜度和空間複...