第一種是時間效率,被稱為時間複雜度,表示乙個演算法的理論上的耗時,衡量的是乙個演算法的執行速度。
第二種是空間效率,被稱作空間複雜度,主要衡量乙個演算法所需要的額外空間。
時間頻度
乙個演算法中,語句執行的次數,被稱為時間頻度t(n)
大o符號:
用於描述函式漸進行為的數學符號。存在某個輔助函式f(n),當n->∞時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式,記做t(n)=of(n),則稱of(n)為演算法的漸進時間複雜度,簡稱時間複雜度。
計算方法
計算出時間頻度與t(n)的數量級
①忽略常量,如果執行時間是常數量級,則用1表示
②忽略低次冪
③忽略高次冪係數
o(1) 常數演算法
int a =
1, b =
3, c =
3;
單條操作頻度為1,屬於常數量級,所以為o(1)
o(n) 線性
int sum =0;
for(
int i =
0; i < n; i++
)
sum = 0 與 i = 0,操作頻度為1,io(n^2)int num1, num2;
//頻度為1
for(
int i=
0; i)}
t(n) = 2+4n+3n2=o(n^2)
o(log2 n) 折半演算法
int i =1;
while
(i<=n)
可以理解為2^f(n) = n,則f(n) = log2 n , t(n) = o(log2 n)。 時間複雜度與空間複雜度
空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...
時間複雜度與空間複雜度
本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...
時間複雜度與空間複雜度
本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...