資料結構之時間 空間複雜度分析

2021-07-22 13:02:03 字數 2326 閱讀 7977

在很多資料結構的面試題中看似簡單,但是對題目的要求卻挺高,主要就體現在複雜度分析方面。複雜度又分為時間複雜度和空間複雜度。

1.時間複雜度

時間複雜度實際就是函式,函式計算執行的基本操作次數 .

在進行時間複雜度分析時需注意:

1)時間複雜度強調的是函式執行的操作次數,這裡的函式是指數學裡面的函式,而不是c語法裡的函式;

2)在實際中我們通常情況考量的是演算法的最壞情況;

3)忽略掉常數;

4)關注執行時間的增長趨勢,關注函式式中增長最快的表示式,忽略係數;

(比如:f(n)=10*n^3+50n+1000,其時間複雜度為o(n)=n^3)

5)遞迴演算法的時間複雜度計算:遞迴總次數*每次遞迴次數.

2.空間複雜度

空間複雜度,它是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。所以它強調的是使用的輔助空間的的大小,而不是指所有的資料所占用的空間。

要注意的是遞迴演算法的空間複雜度,假如遞迴深度為n*每次遞迴的輔助空間大小,如果每次遞迴的輔助空間為常數,則空間複雜度為o(n)。

下面通過斐波那契數列對時間,空間複雜度進行分析一下:

1.

long long* fib(long long n)

return ptr;

}

對於這種演算法,函式真正執行次數為n-1,所以忽略常數後,時間複雜度為o(n);

因為開闢了n+1個空間,有n+1個輔助空間,所以空間複雜度為o(n).

2.

long long fib(long long n)

return ret;

}

這是非遞迴的另一種演算法,函式真正執行次數依然為n-1,所以忽略常數後,時間複雜度還是o(n);

由於採用變數交換的方式,所以在這裡輔助空間個數為乙個常數,空間複雜度為o(1).

3.再看一下遞迴演算法

#include#includeusing namespace std;

long long fib(long long n)

int main()

return mid;

}}

1)假設以最壞情況考慮,二分查詢第一次在n/2中查詢(n為元素個數);第二次在一半的一半中查詢,即n/2/2=n/4;……第x次在n/2^x範圍內查詢,即2^x=n(x=log2^n),所以時間複雜度為o(log2^n).

2)遞迴情況下的空間複雜度:遞迴深度

為n*每次遞迴的輔助空間大小,如果每次遞迴的輔助空間為常數,則空間複雜度為o(n)。

對於遞迴的二分查詢,遞迴深度是log2^n,每次遞迴的輔助空間為常數,所以空間複雜度為o(log2^n)

2.非遞迴情況

int binarysearch1(const int* ptr,const int x,const int len)

else

}return -1;

}

對於非遞迴的二分查詢與遞迴查詢的時間複雜度一樣的分析方法,所以時間複雜度為o(log2^n);

但是在這個過程中,輔助空間為常數級別,所以空間複雜度為o(1)

資料結構之時間複雜度和空間複雜度

演算法複雜度分為時間複雜度和空間複雜度,乙個好的演算法應該具體執行時間短,所需空間少的特點。隨著計算機硬體和軟體的提公升,乙個演算法的執行時間是算不太精確的。只能依據統計方法對演算法進行估算。我們拋開硬體和軟體的因素,演算法的好壞直接影響程式的執行時間。我們看一下小例子 int value 0 執行...

資料結構之時間複雜度和空間複雜度

準備系統性的記錄一下資料結構與演算法的知識點,今天就先從時間複雜度與空間複雜度開始咯 時間複雜度的定義 在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。乙個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程式放在機器上跑起來,才能知道。並且在測試過程中還需...

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...