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

2021-08-29 01:33:11 字數 1399 閱讀 5040

在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。函式計算執行的基本操作次數。

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

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

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

3)忽略掉常數;

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

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

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

空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度 。空間複雜度不是程式占用了多少bytes的空間,算的是變數的個數。空間複雜度計算規則基本跟實踐複雜度類似,也使用大o漸進表示法。要注意的是遞迴演算法的空間複雜度,假如遞迴深度為n*每次遞迴的輔助空間大小,如果每次遞迴的輔助空間為常數,則空間複雜度為o(n)。

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

long long* fib(long long n)

return ptr;

}

對於這種演算法,函式真正執行次數為n-1,所以忽略常數後,時間複雜度為o(n);因為開闢了n+1個空間,有n+1個輔助空間,所以空間複雜度為o(n).

long long fib(long long n)

return ret;

}

這是非遞迴的另一種演算法,函式真正執行次數依然為n-1,所以忽略常數後,時間複雜度還是o(n);由於採用變數交換的方式,所以在這裡輔助空間個數為乙個常數,空間複雜度為o(1).

#include#includeusing namespace std;

long long fib(long long n)

int main()

return mid;

}}

2.非遞迴情況

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

else

}return -1;

}

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

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

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

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

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

在很多資料結構的面試題中看似簡單,但是對題目的要求卻挺高,主要就體現在複雜度分析方面。複雜度又分為時間複雜度和空間複雜度。1.時間複雜度 時間複雜度實際就是函式,函式計算執行的基本操作次數 在進行時間複雜度分析時需注意 1 時間複雜度強調的是函式執行的操作次數,這裡的函式是指數學裡面的函式,而不是c...

資料結構 時間 空間複雜度

1 演算法是指令的有窮序列。5個特徵 有窮性,確定性,可行性,輸入,輸出。4個要求 正確性,可讀性,健壯性,效率與低儲存量。2 漸進時間複雜度 t n o f n 漸進時間複雜度衡量的是乙個演算法基本操作執行次數的數量級,而不是單純地比較程式執行時間的長短。其真實意義應該是 是如果問題規模 n 趨向...