一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間度量記 t(n)=o(f(n)),它表示問題規模隨n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱做演算法的漸近時間複雜度,簡稱時間複雜度。
例如:
void test0(int n)
//總執行次數f(n)=10
//時間複雜度:o(1)
void test1(int n)
for (int i = 0; i < 2 * n; ++i)
}//總執行次數f(n)=2*n+10
//時間複雜度:o(n)
void test1(int n)
for (int idx = 0; idx < 2 * n; ++idx)
for (int i = 0; i < n; ++i)
}}//總執行次數f(n)=n^2+2*n+10
//時間複雜度:o(n^2)
void test1(int n,int m)
for (int k = 0;k < n; ++k)
}//總執行次數f(n)=m+n
//時間複雜度:o(m+n)
int bin_search(int arr,int left,int right,int sz,int key)
return -1;//找不到返回-1
}//時間複雜度:o(log(n/2))
遞迴演算法的時間複雜度:遞迴總次數*每次遞迴的次數
例:求n的階乘
int fac(int n)
//時間複雜度:o(n)
空間複雜度:函式中建立物件的個數關於問題規模函式表示式,一般情況下用o的漸近表示法表示
例如:
int
sum(int n)
//空間複雜度:o(1)
long
long fib(int n)
return fib(n - 1) + fib(n - 2);
}//空間複雜度:o(n)
//時間複雜度:o(2^n)
空間複雜度**:
時間複雜度**:
時間複雜度與空間複雜度
空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...
時間複雜度與空間複雜度
本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...
時間複雜度與空間複雜度
本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...