一、演算法效率
演算法效率分析分為兩種:第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。
時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜度很是在乎。但是經過計算機行業的迅速發展,計算機的儲存容量已經達到了很高的程度。所以我們如今已經不需要再特別關注乙個演算法的空間複雜度。
二、時間複雜度
1. 時間複雜度的概念
時間複雜度的定義:在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。乙個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程式放在機器上跑起來,才能知道。乙個演算法所花費的時間與其中語句的執行次數成正比例,演算法中的基本操作的執行次數,為演算法的時間複雜度。
2. 大o的漸進表示法
例項1.
void func2(int n)
int m = 10;
while ((m--) > 0)
system.out.println(count);
}//例項1基本操作執行了2n+10次,通過推導大o階方法知道,時間複雜度為 o(n)
例項2.
void bubblesort(int array)
}if (sorted == true)
}//例項4基本操作執行最好n次,最壞執行了(n*(n-1))/2次,通過推導大o階方法+時間複雜度一般看最壞,時間複雜度為 o(n^2)
例項3.
int binarysearch(int array, int value)
return -1;
}//例項5基本操作執行最好1次,最壞o(logn)次,時間複雜度為 o(logn) ps:logn在演算法分析中表示是底數為2,對數為n。有些地方會寫成lgn。(因為二分查詢每次排除掉一半的不適合值,一次二分剩下:n/2 兩次二分剩下:n/2/2 = n/4)
例項4.
long factorial(int n)
//例項6通過計算分析發現基本操作遞迴了n次,時間複雜度為o(n)
例項5.
int fibonacci(int n)
//例項7通過計算分析發現基本操作遞迴了2^n次,時間複雜度為o(2^n)
三、空間複雜度
空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。空間複雜度不是程式占用了多少bytes 的空間,因為這個也沒太大意義,所以空間複雜度算的是變數的個數。空間複雜度計算規則基本跟實踐複雜度類似,也使用大o漸進表示法。
例項1.
void bubblesort(int array)
}if (sorted == true)
}//例項1使用了常數個額外空間,所以空間複雜度為 o(1)
例項2.
int fibonacci(int n)
return fibarray;
}//例項2動態開闢了n個空間,空間複雜度為 o(n)
例項3.
long factorial(int n)
//例項3遞迴呼叫了n次,開闢了n個棧幀,每個棧幀使用了常數個空間。空間複雜度為 o(n)
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...
時間複雜度 空間複雜度
一 時間複雜度 實際是指程式執行次數,而不是程式執行時間 1.我們一般討論的是最壞時間複雜度,這樣做的原因是 最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的上限,以最壞代表最全。2.時間複雜度的書寫規則 忽略常數項,用o 1 表示 選取最壞時間複雜度即選取增長最快的項 遞迴的時間複雜度 遞...