對乙個演算法而言,評估乙個演算法的優劣除了能否正確的完成制定任務外就要看乙個演算法的空間複雜度和時間複雜度,一般情況下,我們認為的是看最壞情況下的空間複雜度和最差時間複雜度。需要注意的是,空間複雜度和時間複雜度往往不可得兼,解決同乙個任務乙個時間複雜度低的演算法往往會空間複雜度較高,犧牲空間來換取時間,隨著計算機的發展,一般情況下認為時間複雜度低的演算法更優秀。
時間複雜度常用大o符號表示,取有關輸入的數的最高項如下
int n;
scanf("%d",&num);
int num = 0;
for(;numprintf函式執行次數與n有關則其時間複雜度為o(n).
要注意的是時間複雜度只與輸入的值的最高項有關係,如下為二分搜尋的**
i=0;
while(i其**執行為n+n^2,但是複雜度為o(n^2).
乙個**如果沒有輸入項其執行**條數固定,則無論多長都是o(1).
利用遞迴寫法的斐波那契數列
int fib(int n)
int main()
演算法可表示為
當輸入為5的時候,可以看出深度為5,其中運算9次及2^3+1次運算,演算法複雜度為o(2^n);
常見的時間複雜度順序為
o(1)<o(log2n)<o(n)<o(nlog2n)<o(n2)<o(n3)<…<o(2n)<o(n!)
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。比如直接插入排序的空間複雜度是o(n^2),空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法的執行時間和所需要占用的儲存空間兩個方面。
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...