程式的時間複雜度指的是程式在執行過程中的運算次數,並為最壞情況下的運算次數
程式的空間複雜度指的是程式在執行過程中需要系統為其變數輔助開闢記憶體的多少
斐波那契序列用遞迴實現
圖示為#include
int fib(int n)
int main()
從圖中可以看出斐波那契遞迴演算法中求解f(n),必須先計算f(n-1)和f(n-2),計算f(n-1)和f(n-2),又必須先計算f(n-3)和f(n-4)。。。。。。以此類推,直至必須先計算f(1)和f(0),然後逆推得到f(n-1)和f(n-2)的結果,從而得到f(n)要計算很多重複的值,在時間上造成了很大的浪費,演算法的時間複雜度隨著n的增大呈現指數增長,時間的複雜度為o(2^n),即2的n次方,其遞迴迴圈的基本操作次數是n-1,輔助空間是n+1,所以:空間複雜度o(n)
折半查詢迭代實現
圖示如下#includeint find(const
int* a,int x,int line)
else
if(*mid>x)
}return 0;
}int main()
;int l=sizeof(arr)/sizeof(arr[0]);
int n=0;
int ret=0;
scanf("%d",&n);
ret=find(arr,n,l);
if(ret)
printf("有");
else
printf("沒有");
return 0;
}
迴圈的基本次數是log2 n,所以:時間複雜度是o(log2 n);
由於輔助空間是常數級別的所以:空間複雜度是o(1);
時間複雜度及空間複雜度
一.時間複雜度 時間複雜度實際就是乙個函式,該函式計算的是執行基本操作的次 數,而不是程式執行時間。1.在實際中通常關注的是演算法的最壞運 況。乙個演算法的最壞情況的執行時間是在任意輸入下的執行時間上界。一般情況下使用o漸進表示法來計算演算法的時間複雜度。2.書寫方式 例1 void test in...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...