演算法 第二章 時間複雜度與空間複雜度

2021-08-11 14:33:45 字數 1408 閱讀 8688

時間複雜度定義:

進行演算法分析時:

這樣用o來體現演算法時間複雜度的方法,叫做大o記法。

隨著資料規模n的增大,t(n)增長最為緩慢的的演算法叫做最優演算法

那麼如何分析演算法的時間複雜度呢? -> 如何推導大o的階呢?

//常數階     ->  o(1)

cout

<<"xiaohan-xiaohan-xiaohan"

<<"xiaohan-xiaohan-xiaohan"

<<"xiaohan-xiaohan-xiaohan"

<<"xiaohan-xiaohan-xiaohan"

<<"xiaohan-xiaohan-xiaohan"

<<"xiaohan-xiaohan-xiaohan"

0;

//線性階     ->   o(n)

//一般來說就是單個巢狀loop,不是for+for這種 就是線性階

for(int i=0 ;i...

}//以上的**,因為迴圈體中**執行n次,因此時間複雜度為o(n)

//平方階      -> o(n^2)

for (int a=0;afor (int b=0;b...

}}

//這樣的演算法時間複雜度是多少呢?

for (int a=0;afor (int b=a;b...

}}

這樣的函式,要運算多少次以後退出呢?

//對數階

while(i2*i;

}

2^x = n -> x=log(2)n,因此時間複雜度為o(log(2)n)

for (int i=0 ; ifunction

(i) // 這裡的時間複雜度是n

} function

(int i) -> 總體的時間複雜度是o(n)

for (int i=0 ; ifunction

(i) // 這裡的時間複雜度是n

} function

(int i) -> 總體的時間複雜度是o(n^2)

summary

(1).乙個規則是到底要執行多少次函式才會終止

(2).區別是有的已經寫明白了跟資料規模n之間的關係,例如常規for迴圈

(3).有的也只是要計算一下執行次數跟n之間的關係,或是直接求或是列簡單方程

演算法的複雜度 時間複雜度與空間複雜度

通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...