【資料結構實戰c++】6 演算法效率的度量
基本身演算法時間複雜度是o(2n)o(n!)o(nn)
的時候,執行時間就是不可接受的了
例項分析
分最好情況和最壞情況
一般沒有特殊說明,分析演算法的時間複雜度都是指最壞時間複雜度
-s(n) = s(f(n))
n為演算法的問題規模
f(n)是空間使用函式,與n有關
空間複雜度例項
所需要的單位記憶體 : n +4
空間複雜度 :s(n + 4) = s(n)
例項分析:空間換時間
/*
問題:在乙個由自然數1-1000中某些數字所組成的陣列中,每個數字可能出現零次或者多次。
設計乙個演算法,找出出現次數最多的數字。
*/#include
using
namespace std;
void
search
(int a,
int len)
// o(n)
;int max =0;
for(
int i=
0; i
)//遍歷陣列元素,作為下表統計,空間換時間
for(
int i=
0; i<
1000
; i++)}
for(
int i=
0; i<
1000
; i++)}
}int
main
(int argc,
char
* ar**)
;search
(a,sizeof
(a)/
sizeof
(*a));
return0;
}
只能說明是同乙個級別的,但是不能說明複雜度相同小結一般工程中,時間複雜度不超過0(n^3)
演算法分析中,重點考慮的是最壞時間複雜度,時間複雜度也是最關注的
大o表示法童謠適合演算法的空間複雜度
空間換時間是工程中經常用的策略
資料結構 演算法效率
資料結構之前,先來了解兩個概念 時間複雜度 由來 這裡的時間複雜度不是程式執行的時間。評價乙個演算法的好壞,並不能通過程式執行的快慢來評估。因為程式的執行快慢還有很多因素,和計算機硬體有關,所以如果在不同的電腦上 執行的時間可能不一樣 那麼這裡的時間複雜度指啥,指的是演算法中基本操作的執行次數。比如...
資料結構初學過程中對演算法效率度量的理解
引例 對於給定陣列a 8 如何將陣列前三個元素移到陣列後面使得 a 8 1 第一種方法 耗費記憶體 定義乙個新的空白陣列b,將a 3 往後的元素依次放入b 0 至b 4 接著將a 0 至a 2 放入b 5 至b 7 最後用 a i b i 將元素移入a中即可。第1步 第2步 如下 int i,j i...
資料結構 求演算法效率的介紹
一 演算法效率。二 時間效率。一 定義 1 時間效率也被稱為時間複雜度,它反映的是乙個演算法所執行時間的快慢,時間複雜度大,則效率低,反之,效率就高。2 在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行間。一 個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程...