就是說這個演算法要進行多少次計算,遍歷。
空間複雜度就是說這個演算法需要用到多少空間記憶體等。
關於時間複雜度,常見的有o(1),o(n),o(n^2)等;
如果說這個演算法的次數是可以確定的,是常數次,比如100次,10000次,那麼時間複雜度就是o(1)。
比如:
int
main()
return0;
}
可以知道只計算1000次,所以時間複雜度為o(1);
如果是不確定的比如for迴圈
for
(size_t i =
0;i)
像這樣一層是n次,時間複雜度o(n)。
如果再巢狀一次。
for
(size_t i =
0;i)}
就是n*n。時間複雜度o(n^2);
類似三層巢狀就是o(n^3);
類似的,有這樣情況:
for
(size_t i =
0;i)for
(size_t i =
0;i)
複雜度是n+n = 2n;一般都忽略係數,一律記作o(n);
同樣的,如複雜度是n*n +n+n+100;記作o(n^2);
類推其他情況都一樣,都看複雜度最高的那一項;
比較特殊的有o(logn),o(2^n);
二分法的時間複雜度為o(logn)
int
binarysearch
(int
* a,
int n,
int x)
return-1
;}
計算費波納茨演算法為o(2^n)
long
long
fibonacci
(size_t n)
是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。
因為硬體技術的提高,現在絕大多數情況都擁有足夠的空間,所以不常用;
一般直接呼叫排序演算法空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了。
下面是我整理的一些排序複雜度表:
時間複雜度和空間複雜度簡述
定義 乙個演算法中的語句執行次數稱為語句頻度或時間頻度 約定 檢驗演算法的效率,主要考慮最壞時間複雜度和平均時間複雜度一般不特別說明,討論的時間複雜度均是最壞情況下的時間複雜度 1 時間複雜度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個...
時間複雜度和空間複雜度
同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能...
時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多...