演算法複雜度分為時間複雜度和空間複雜度,乙個好的演算法應該具體執行時間短,所需空間少的特點。
隨著計算機硬體和軟體的提公升,乙個演算法的執行時間是算不太精確的。只能依據統計方法對演算法進行估算。我們拋開硬體和軟體的因素,演算法的好壞直接影響程式的執行時間。
我們看一下小例子:
int value = 0; // 執行了1次
for (int i = 0; i < n; i++)
這個演算法執行了 1 + n 次,如果n無限大,我們可以把前邊的1忽略,也就是說這個演算法執行了n次
時間複雜度常用大o符號表示,這個演算法的時間複雜度就是o(n).
概念: 一般情況下,演算法的基本操作重複執行的次數是模組n的某一函式f(n),因此,演算法的時間複雜度記做 t(n) = o(f(n))。 隨著模組n的增大,演算法執行的時間增長率f(n)的增長率成正比,所以f(n)越小,演算法 的時間複雜度越低,演算法的效率越高。
計算時間複雜度
1.去掉執行時間中的所有加法常數。
2.只保留最高端項。
3.如果最高端項存在且不是1,去掉與這個最高端相乘的常數得到時間複雜度
我們看乙個例子
for (int i = 0; i < n; i++)
}當 i = 0 時 裡面的fo迴圈執行了n次,當i等待1時裡面的for迴圈執行了n - 1次,當i 等於2裡裡面的fro執行了n - 2次........所以執行的次數是
根據我們上邊的時間複雜度演算法
1.去掉執行時間中的所有加法常數: 沒有加法常數不用考慮
2.只保留最高端項: 只保留
3. 去掉與這個最高端相乘的常數: 去掉
最終這個演算法的時間複雜度為
再看乙個線性的
for ( int i = 0; i < n; i++)
因為迴圈要執行n次所以時間複雜度為o(n)
其它的我也就不乙個乙個算了,下面給出了常用的時間複雜度
排序法最差時間分析
平均時間複雜度
穩定度空間複雜度
氣泡排序
o(n2)
o(n2)
穩定o(1)
快速排序
o(n2)
o(n*log2n)
不穩定o(log2n)~o(n)
選擇排序
o(n2)
o(n2)
穩定o(1)
二叉樹排序
o(n2)
o(n*log2n)
不一頂o(n)
插入排序
o(n2)
o(n2)
穩定o(1)
堆排序o(n*log2n)
o(n*log2n)
不穩定o(1)
希爾排序oo
不穩定o(1)
**:
如何衡量演算法時間複雜度,空間複雜度以及大O表示法
演算法是用來解決特定的問題的一種思想,對於同乙個問題,可以有多種實現方式,最終的結果是一樣的,但是整個過程需要的時間和資源不同,我們就需要在時間和空間上進行衡量。時間複雜度 當前演算法所需要的執行時間 空間複雜度 當前演算法所需要的記憶體空間 大 o 表示法 也叫做漸進式時間複雜度,公式為 t n ...
演算法時間複雜度空間複雜度
演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...
演算法 時間複雜度 空間複雜度
1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...