時間複雜度與空間複雜度

2022-09-06 02:42:10 字數 1226 閱讀 3472

學習資料結構的基礎之一就是了解時間複雜度與空間複雜度

很多人對它的字面意義非常陌生,通常在計算機中可以簡單的認為它們就是計算次數和占用空間大小

如果乙個演算法的執行次數是 t(n),那麼只保留最高次項,同時忽略最高項的係數後得到函式 f(n),此時演算法的時間複雜度就是 o(f(n))

void afunc(int n) 

}}

當 i = 0 時,內迴圈執行 n 次運算,當 i = 1 時,內迴圈執行 n - 1 次運算……當 i = n - 1 時,內迴圈執行 1 次運算。

所以,執行次數 t(n) = n + (n - 1) + (n - 2)……+ 1 = n(n + 1) / 2 = n^2 / 2 + n / 2。

此時時間複雜度為 o(n^2)。

演算法的時間複雜度通常有 o(1)(常量階)、o(n½) 、 o(n)(線性階)、 o(logn)(對數階)、 o(nlogn)、 o(n^2)(平方階)、 o(n^3)、 o(2^n)(指數階)、o(n!)等形式。

當n大於一定的值後,各種不同的數量級對應的值存在著如下關係:

o(logn)2)3) 通常除非特別指定,我們提到的執行時間都是最壞情況的執行時間。

演算法的時間複雜度和空間複雜度是可以相互轉化的。

谷歌瀏覽器相比於其他的瀏覽器,執行速度要快。是因為它占用了更多的記憶體空間,以空間換取了時間。

演算法中,例如判斷某個年份是否為閏年時,如果想以時間換取空間,演算法思路就是:當給定乙個年份時,判斷該年份是否能被4或者400整除,如果可以,就是閏年。

如果想以空間換時間的話,判斷閏年的思路就是:把所有的年份先判斷出來,儲存在陣列中(年份和陣列下標對應),如果是閏年,陣列值是1,否則是0;當需要判斷某年是否為閏年時,直接看對應的陣列值是1還是0,不用計算就可以馬上知道。

對於乙個演算法,其 時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,當追求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。另外,演算法的所有效能之間都存在著或多或少的相互影響。因此,當設計乙個演算法(特別是大型演算法)時,要綜合考慮演算法的各項效能,演算法的使用頻率,演算法處理的資料量的大小,演算法描述語言的特性,演算法執行的機器系統環境等各方面因素,才能夠設計出比較好的演算法。

演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。

時間複雜度與空間複雜度

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

時間複雜度與空間複雜度

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

時間複雜度與空間複雜度

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