時間複雜度和空間複雜度的概念

2021-05-23 09:54:58 字數 1545 閱讀 7025

演算法複雜度 

分為時間複雜度和空間複雜度

。其作用: 時間複雜度是度量演算法執行的時間長短;而空間複雜度是度量演算法所需儲存空間的大小。

乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能 知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句 的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

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

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

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

例:演算法:

view plain

copy to clipboard

print?

for (i=1;i<=n;++i)      

}   

}  

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

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

則該演算法的 時間複雜度:t(n)=o(n的三次方)

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log2n),線性階o(n),

線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,

k次方階o(nk), 指數階o(2n) 。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:

s(n)=o(f(n))

我們一般所討論的是除正常占用記憶體開銷外的輔助儲存單元規模。

floyd:求多源、無負權邊的最短路。用矩陣記錄圖。時效性較差,時間複雜度o(v^3)。

dijkstra:求單源、無負權的最短路。時效性較好,時間複雜度o(v^2)。可以用堆優化。

bellman-ford:求單源最短路,可以判斷有無負權迴路(若有,則不存在最短路),時效性較好,時間複雜度o(ve)。

spfa:是bellman-ford的佇列優化,時效性相對好,時間複雜度o(ke)。(k<寬搜:求單源無權最短路。矩陣記錄法時間複雜度o(v^2);邊表記錄法時間複雜度o(ke)。

稠密圖單源無負權最短路:dijkstra。

稠密圖單源有負權最短路:spfa。

稀疏圖單源最短路:spfa或bellman-ford。

多源無負權最短路:floyd。

多源無權最短路:寬搜。

概念理解 時間複雜度 空間複雜度

一.時間複雜度 time complexity 在進行演算法分析時,語句總執行次數t n 是關於問題規模 n 的函式。進而分析執行次數t n 隨規模 n 的變化情況並確定t n 的數量級。演算法的時間複雜度就是演算法的時間度量,記作t n o f n 它表示隨問題規模 n 的增大,演算法的執行時間的...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...