2. 如何評判乙個演算法的好壞?
3 時間複雜度相關知識
4 如何計算乙個演算法的執行時間?
5 空間複雜度 s(n)
6 參考鏈結
// 計算 a 和 b 的值
public static
intplus
(int a,
int b)
// 計算 1 + 2 + 3 + ... + n 的和
public static
intsum
(int n)
return result;
}
/*
* 斐波那契數列 : fibonacci number
* 0 1 1 2 3 5 8 13 ...
*/// 方式一:
public static
intfib1
(int n)
// 方式二:
public static
intfib2
(int n)
return second;
}
int num =45;
// fib1 所用時間 : 0.44秒
timetool.
check
("fib1"
, new task()
});// fib2 所用時間 : 0.0秒
儲存演算法本身所占用的儲存空間
儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。
演算法的輸入輸出資料所占用的儲存空間
演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。
演算法在執行過程中臨時占用的儲存空間
演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種演算法是「就地"進行的,是節省儲存的演算法;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元。
注意:大 o 表示法僅僅是一種粗略的分析模型,是一種估算,能幫助我們短時間內了解乙個演算法的執行效率
演算法執行時間需通過依據該演算法編制的程式在計算機上執行時所消耗的時間來度量。而度量乙個程式的執行時間通常有兩種方法。
// 彙編指令
// 1
if(n >10)
else
if(n >5)
else
// 1 + 4 + 4 + 4
for(
int i =
0; i <
4; i++
)// o(1)
// o(n)
// 1 + 3n
for(
int i =
0; i < n; i++
)
// 1 + 2n + n * (1 + 3n)
// 1 + 2n + n + 3n^2
// 3n^2 + 3n + 1
// o(n^2)
for(
int i =
0; i < n; i++
)}
// 執行次數 = log2(n)
// o(logn)
while
((n = n /2)
>0)
n 執行次數42
6283
164執行次數 c
2^c = n
c =log
(n)
// 一種情況
for(
int i =
0; i < n; i++)}
// 第二種情況
// 1 + 2*log2(n) + log2(n) * (1 + 3n)
// 1 + 3*log2(n) + 2 * nlog2(n)
// o(nlogn)
for(
int i =
1; i < n; i = i *2)
}
public static
intfib1
(int n)
當 n 無限大的時候, 執行次數變為 2^nt
既然時間複雜度不是用來計算程式具體耗時的,那麼我也應該明白,空間複雜度也不是用來計算程式實際占用的空間的。
空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的乙個量度,同樣反映的是乙個趨勢,我們用 s(n) 來定義。
空間複雜度比較常用的有:o(1)、o(n)、o(n²),我們下面來看看:
int i =1;
int j =2;
++i;
j++;
int m = i + j;
int
m = new int
[n]for
(i =
1; i <= n;
++i)
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...