確定一種標準和確定的方法來確定演算法的效能(速度和記憶體來確定演算法的效能)。
1.大o表示法
乙個演算法的增長速率或者乙個演算法的增長規律非常重要,因為當輸入資料量變得無窮大時,它可以用來描述演算法的效率到底有多高。o表示法正是這樣一種表示演算法增長規律的方法。我們通常使用演算法的最壞情況複雜度,記為t(n),定義為任何大小的輸入n所需的最大執行時間。
o表示法的幾點規則:
簡言之,如果乙個演算法的執行次數是t(n),那麼只保留最高次項,同時忽略最高項的係數後得到函式f(n),此時演算法的時間複雜度就是o(f(n))。
o法的例子及工作原理
…2.時間複雜度
定義:演算法的時間複雜度o(n)是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度函式。假設t(n)表示演算法的執行時間,它的複雜度o(n)並沒有具體表明執行此演算法實際需要多少時間。
常見的複雜度量級
舉例:求該演算法的時間複雜度
list =
[n]for
(i=0
, i++
, i}}
i=0, j=1, k=2,3,4,5…n-1 =>n-2
i=0, j=2, k=3,4,5…n-1 =>n-3
…i=0, j=n-2, k=n-1 =>1
sum_0=1+2+…+n-2=(n-2)(n-1)/2
i=1, j=2, k=3,4,5…n-1
i=1, j=3, k=4,5…n-1
…i=1, j=n-2, k=n-1
sum_1=1+2+…+n-3=(n-3)(n-2)/2
….sum_n-2=1+2
sum_n-3=1
sum = sum_0+ sum_1+…+ sum_n-2+ sum_n-3
計算菲波那切數列的時間複雜度:
def
afunc
(n):
if(n<=1)
:return
1else
:return afunc(n-1)
+afunc(n-
2)
通過歸納證明法可以證明,當 n >= 1 時 t(n) < (5/3)^n,同時當 n > 4 時 t(n) >= (3/2)^n。
所以該方法的時間複雜度可以表示為 o((5/3)^n),簡化後為 o(2^n)
除了考慮演算法的複雜度之外,我們還需要考慮一些其他的因素。乙個高效的實現並不能總是影響演算法的複雜度,但它可以降低常量因素的影響,從而使演算法在實際應用中更加高效。
3.空間複雜度
演算法的空間複雜度:定義為該演算法所耗費的儲存空間,它也是問題規模n的函式。漸進空間複雜度也常常稱為空間複雜度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存器演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...