時間複雜度與空間複雜度區分

2021-08-21 11:53:16 字數 2315 閱讀 3070

1.時間複雜度:

時間複雜度即使演算法執行次數n的某個函式f(n),進而分析f(n)隨n的變化情況並確定t(n)的數量級。這裡用」o」來表示數量級

時間複雜度的表示式為: t(n)=o(f(n))

它表示隨著問題規模的n的增大,演算法的執行時間的增長率和f(n)的增長率相同,這稱作演算法的漸進時間複雜度,簡稱時間複雜度。而我們一般討論的是最壞時間複雜度,這樣做的原因是:最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的上界,分析最壞的情況以估算演算法指向時間的乙個上界。

時間複雜度的分析方法:

1)時間複雜度就是函式中基本操作所執行的次數

2)一般預設的是最壞時間複雜度,即分析最壞情況下所能執行的次數

3)忽略掉常數項

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

5)計算時間複雜度是估算隨著n的增長函式執行次數的增長趨勢

6)遞迴演算法的時間複雜度為:遞迴總次數 * 每次遞迴中基本操作所執行的次數

2. 空間複雜度:

演算法的空間複雜度不計算實際占用的空間,而是算整個演算法的「輔助空間單元的個數」,與問題的規模沒有關係。演算法的空間複雜度s(n)定義為該演算法所耗費空間的數量級。

s(n)=o(f(n))若演算法執行時所需要的輔助空間相對於輸入資料量n而言是乙個常數,則稱這個演算法的輔助空間為o(1)

遞迴演算法的空間複雜度:遞迴深度n*每次遞迴所要的輔助空間, 如果每次遞迴所需的輔助空間是常數,則遞迴的空間複雜度是 o(n)

3.二分查詢的時間空間複雜度

首先了解二分查詢,首先在長度為n的表範圍中查詢,第一次迴圈在n/2中查詢,第二次在n/2/2中查詢,依次迴圈。假設在第x次找到,那麼 就是找2的x次方次,有2的x次方=n解出x為log2的n ,故時間複雜度為log2n。由於輔助空間是常數級別的所以:空間複雜度是o(1)

4.遞迴實現斐波那契數列的時間空間複雜的

首先了解什麼是斐波那契數列,就是這樣一組數 1 1 2 3 5 8 13…,前兩個數為1後面的數依次為其前兩個的和

遞迴實現的演算法為

將遞迴執行圖畫出來可以明顯的看出來,這是一顆二叉樹,無論他是否是滿二叉樹,因為我們前面說過我們只計算最壞的情況,所以要計算這課二叉樹有多少個元素,數的深度為n,那麼元素為2^n-1;去掉常數項就是2的n次方

時間複雜度的分析:菲波那切數也可以看做乙個數結構,1分為2, 2分為4, 4分為8,…而要去求第n個斐波那契數,就需要被分解成2^n-1個數字,也就是需要執行2^n-1次,用大o表示法記為o(2^n)。

遞迴的時間複雜度是:遞迴次數*每次遞迴中執行基本操作的次數

所以時間複雜度是:o(2^n)(共執行多少次)

遞迴的空間複雜度是:遞迴的深度*每次遞迴所需的輔助空間的個數

所以空間複雜度是:o(n)( 遞迴一次要開闢乙個空間)

**我們看乙個例子

for (int i = 0; i < n; i++)

}**

當 i = 0 時 裡面的fo迴圈執行了n次,當i等待1時裡面的for迴圈執行了n - 1次,當i 等於2裡裡面的fro執行了n - 2次……..所以執行的次數是

根據我們上邊的時間複雜度演算法

1.去掉執行時間中的所有加法常數: 加法常數不用考慮

2.只保留最高端項: 只保留 n^2/2

3. 去掉與這個最高端相乘的常數: 去掉 1/2 只剩下 n^2

最終這個演算法的時間複雜度為 o(n^2)

再看乙個線性的

for ( int i = 0; i < n; i++)

因為迴圈要執行n次所以時間複雜度為o(n)

時間複雜度與空間複雜度

空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...

時間複雜度與空間複雜度

本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...

時間複雜度與空間複雜度

本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...