在計算執行程式的過程中,有兩個衡量乙個程式的所要消耗的空間和時間,這兩個單位就是空間和時間複雜度。
因為如果只是單純的對計算機的執行時間進行乙個時間複雜度的定義,因為每台計算機的執行速度因配置而定,很難完全相同,所以這樣定義的時間複雜度是有問題的,但是如果將時間複雜度定義為乙個程式最大執行的次數,就可以避開這個問題,因為無論是配置怎樣高的計算機,他對乙個程式的執行次數是肯定的,所以時間複雜度就是乙個程式執行的次數。我麼這裡說的執行次數都是最大執行次數,因為乙個程式的最差的情況往往是越容易發生的,所以我們選取最大的執行次數來計算時間複雜度。
而空間複雜度的含義就和他的字面意思一樣,就是程式在執行過程中所需要消耗的記憶體空間的大小。
上面的是基本的定義,我們這裡進行乙個時間複雜度的具體討論,空間複雜的具體討論參照時間複雜度,就不一 一枚舉了。
1.當計算機的執行次數為有限次的時候,時間複雜度是 o(1)。
如果乙個程式中有乙個迴圈,迴圈進行的次數是確定的,那麼這個迴圈的時間複雜度就是 o(1)。所以當我們看到乙個時間複雜度為o(1)的程式的時候,並不是說這個程式僅僅執行了乙個,而是這個程式執行了有限次,你可以知道的有限次,哪怕執行了一萬次,一千萬次,只要他的執行次數是已知的,時間複雜度都是o(1)。
for(int i = 0;i < 10;i++)//這樣的迴圈有10次,時間複雜度是o(1)
for(int i = 0;i < 100000000;i++)//這樣的迴圈有100000000次,時間複雜度是o(1)
2.當計算機的執行次數並不能之直接指導具體的執行次數的時候,根據情況,進行時間複雜度的分析
看一下例子,如果乙個迴圈的迴圈次數並不已知,而是根據傳入的引數進行變化,那就把這個次數定位n,當出現執行次數為n*n的時候,時間複雜度就是 n^2,不能進行簡化,但是如果執行次數為2n的時候,時間複雜度就是n,因為在計算機的執行過程中,這樣有限的已知的倍數可以化簡為1,所以不進行計算。並且如果乙個 n+20的執行次數,也應該簡化為n,因為有限的執行次數都是需要進行簡化的。
這裡的簡化標準僅僅只是乙個開始,我準備了一些例子,通過例子,來看具體的簡化操作。答案我會附在後面,可以自己作對比。
void func1(int n)
} for (int k = 0; k < 2 * n ; ++ k)//執行次數為2n
int m = 10;
while (m--)
printf("%d\n", count);
}
void func2(int n)// 計算func2的時間複雜度?
int m = 10;
while (m--)
printf("%d\n", count);}
void func3(int n, int m)// 計算func3的時間複雜度?
for (int k = 0; k < n; ++k)
printf("%d\n", count);
}void func4(int n)// 計算func4的時間複雜度?
printf("%d\n", count);
}void bubblesort(int* a, int n) // 計算bubblesort的時間複雜度?
}if (exchange == 0)
break; }}
int binarysearch(int* a, int n, int x)// 計算binarysearch的時間複雜度?
return -1;
}
這裡是答案:
2. 例項2基本操作執行了m+n次,有兩個未知數m和n,時間複雜度為 o(n+m)
3. 例項3基本操作執行了10次,通過推導大o階方法,時間複雜度為 o(1)
4. 例項4基本操作執行最好1次,最壞n次,時間複雜度一般看最壞,時間複雜度為 o(n)
5. 例項5基本操作執行最好n次,最壞執行了(n*(n+1)/2次,通過推導大o階方法+時間複雜度一般看最 壞,時間複雜度為 o(n^2)
6. 例項6基本操作執行最好1次,最壞o(logn)次,時間複雜度為 o(logn) ps:logn在演算法分析中表示是底 數為2,對數為n。有些地方會寫成lgn。(建議通過摺紙查詢的方式講解logn是怎麼計算出來的
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...