一、演算法:是解決特定問題求解不走的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
1.正確性:演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得島問題的正確答案。
2.可讀性:演算法設計的另一目的是為了方便閱讀、理解和交流。
3.健壯性:當資料不合理時,演算法也能作出相關處理,而不是產生異常或莫名其妙的結果。
4. 時間效率高和儲存量低
如果一段**執行n次,運算元量用
f(n) = n
二、演算法的時間複雜度
在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作:
t(n) = o(f(n))。他表示隨問題規模n的增大,演算法執行時間的增長率和 f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中 f(n)是問題規模n的某個函式。
推導大o階方法
1.用常數1取代執行時間中的所有加法常數
2.在修改後的執行次數函式中,只保留最高端項。
3.如果最高端項存在且不是1,則去除與這個項相乘的常數。得到的結果就是大o階。
1.常數階:如果f(n)為常數時 時間複雜度 可記作o(1)。
2.線性階:分析演算法的複雜度,關鍵就要分析迴圈結構的運**況。for迴圈 迴圈體裡 執行的時間複雜度為o(1)的程式步驟序列,他的時間複雜度為 o(n)。以為**需要執行n次。
for(int i = 0;i
3.對數階:
int count = 1;
while(count < n)
由於每次count乘以2之後,就距離n更近了一分。也就是說,有多少個2相乘後大於n,則會退出迴圈。由2^x = n 得到 x = log2 n(以2為底n的對數)。所以這個迴圈的時間複雜度為o(logn);
4.平方階:
int i ,j;
for(i = 0; i < m; i ++ )
}對於外迴圈,不過是內部這個時間複雜度為o(n)語句,再迴圈n次。所以這段**的時間複雜度為o(m*n);
常見的時間複雜度
執行次數函式 階 非正式術語
12 o(1) 常數階
2n+3 o(n) 線性階
3n^2 + 2n + 1 o(n^2) 平方階
5log2 n + 20 o(logn) 對數階
2n+3nlog2 n+19 o(nlogn) nlogn階
6n^3+2n^2+3n+4 o(n^3) 立方階
2^n o(2^n) 指數階
常用的時間複雜度所消耗的時間從小到大依次是:
o(1) < o(logn) < o(n) < o(nlogn) < o(n^2) < o(n^3) < o(2^n) < o(n!) < o(n^n)
最壞情況執行時間是一種保證,那就是執行時間將不會再壞了。在應用中,這是一種最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間。
平均執行時間是所有情況中最有意義的,因為他是期望的執行時間。
*一般在沒有特殊說明的情況下,都是只最壞時間複雜度。
三、演算法的空間複雜度
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:
s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於所佔儲存空間的函式。
資料結構 時間複雜度 空間複雜度
1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...
資料結構時間複雜度
如何衡量乙個演算法的複雜度?演算法的時間複雜度和空間複雜度統稱為演算法的複雜度 void test int n for int k 0 k 2 n k icount intcount 10 while count icount 這個函式執行次數為f n n n 2 n 10 時間複雜度實際就是乙個函...
資料結構 時間複雜度
時間複雜度是同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。定義 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不...