時間複雜度和空間複雜度的計算

2021-08-13 09:00:50 字數 2537 閱讀 6545

時間複雜度

1. 一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f(n),因此,演算法的時間複雜度記做:t(n)=o(f(n))

分析:隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。

2. 在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出 t(n) 的同數量級(它的同數量級有以下:1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n) = 該數量級,若 t(n)/f(n) 求極限可得到一常數c,則時間複雜度t(n) = o(f(n))

例:演算法:

則有 t(n) = n 的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定 n的三次方 為t(n)的同數量級

則有 f(n) = n的三次方,然後根據 t(n)/f(n) 求極限可得到常數c

則該演算法的時間複雜度:t(n) = o(n^3) 注:n^3即是n的3次方。

3.for迴圈中容易計算的方法是:看看有幾重for迴圈,只有一重則時間複雜度為o(n),二重則為o(n^2),依此類推,如果有二分則為o(logn),二分例如快速冪、二分查詢,如果乙個for迴圈套乙個二分,那麼時間複雜度則為o(nlogn)。

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

空間複雜度

類似於時間複雜度的討論,乙個演算法的空間複雜度(spacecomplexity)s(n)定義為該演算法所耗費的儲存空間,它也是問題規模n的函式。

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。若乙個演算法為遞迴演算法,其空間複雜度為遞迴所使用的堆疊空間的大小,它等於一次呼叫所分配的臨時儲存空間的大小乘以被呼叫的次數(即為遞迴呼叫的次數加1,這個1表示開始進行的一次非遞迴呼叫)。

遞迴的空間複雜度:每次遞迴所開空間*深度

時間與空間複雜度的聯絡

對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,當追求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。

1:實現二分查詢演算法的遞迴及非遞迴。(分析時間複雜度及空間複雜度) 

//非遞迴

//時間複雜度 o(log2 n) 空間複雜度o(1)

int binaryfind1(int a, int key, int n)

return null;

}

//遞迴

//時間複雜度:o(log2 n)空間複雜度:o(log2n )

int binaryfind2(int a, int start, int end, int key)

else

return -1;

}

int main()

; //printf("%d\n",binaryfind1 (a, 2, sizeof(a) / sizeof(a[0])));

printf("%d\n", binaryfind2(a,2,7,5));

system("pause");

return 0;

}

2:實現斐波那契數列的遞迴及非遞迴。(分析時間複雜度及空間複雜度)

#define _crt_secure_no_warnings

#include#include#include

//遞迴演算法

//(1)要想求解f(n),必須先計算f(n-1)和f(n-2),計算f(n-1)和f(n-2),又必須先計算f(n-3)和f(n-4).....以此類推,直至必須先計算f(1)和f(0),然後逆推得到f(n-1)和f(n-2)的結果,從而得到f(n)要計算很多重複的值,在時間上造成了很大的浪費,演算法的時間複雜度隨著n的增大呈現指數增長,時間的複雜度為o(2^n),即2的n次方。

(2)空間複雜度為o(n)

int fib1(int n)

//非遞迴

//(1)從n(>2)開始計算,用f(n-1)和f(n-2)兩個數相加求出結果,這樣就避免了大量的重複計算,它的效率比遞迴演算法快得多,演算法的時間複雜度與n成正比,即演算法的時間複雜度為o(n).

(2)空間複雜度為o(1)

long long fib2(int n)

return f3;

}int main()

時間複雜度和空間複雜度計算

時間複雜度 首先要說的是,時間複雜度的計算並不是計算程式具體執行的時間,而是演算法執行語句的次數。當我們面前有多個演算法時,我們可以通過計算時間複雜度,判斷出哪乙個演算法在具體執行時花費時間最多和最少。常見的時間複雜度有 常數階o 1 對數階o log2 n 線性階o n 線性對數階o n log2...

時間複雜度和空間複雜度的計算

時間複雜度 執行乙個演算法,執行的次數和問題規模之間的函式關係,用o 表示。o 1 常數項,和問題的規模無關。時間複雜度計算規則 1.只保留最高端項 2.不要係數 空間複雜度 執行乙個演算法,需要額外的輔助空間和問題規模之間的函式關係,用o 表示。簡單來說,時間複雜度指的是執行次數,空間複雜度指的是...

時間複雜度 和空間複雜度的計算

一 演算法的時間複雜度定義 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n o f n 稱o f n 為演算法的漸進時間複雜度...