演算法的時間複雜度

2021-10-25 06:43:23 字數 1099 閱讀 9477

本篇為閱讀極客時間

資料結構與演算法之美

王爭 前google工程師

講課的筆記,侵刪

演算法的時間複雜度並不是表示執行演算法具體用的時間,而是表示**的執行時間隨著資料規模的變化趨勢。

例如:

int

cal(

int n)

return sum;

}

我們可以假設,執行每行**的時間是一樣的,為unit_time,那麼執行第二行int sum=0的時間為unit_time,執行第三行int i = 1的時間也為unit_time,第

四、五行都執行了 n 遍,所以需要 2nunit_time的執行時間,因此總的執行時間為:

t(n) = 2unit_time+2n*unit_time=(2n+2)unit_time。

再例如:

int

cal(

int n)

}}

那麼執行第

二、三、四行int sum=0的時間為unit_time,執行第

五、六行為 n 遍,所以需要 2nunit_time的執行時間,第

七、八行**的是間為n ^ 2unit_time,

因此總的執行時間為:

t(n) = 3unit_time+n^2unit_time=(n ^ 2+2n+3)unit_time= o(n ^ 2+2n+3)。

當n無窮大時,起決定作用的是第一項,因此上式可以寫為: t(n)=o(n ^ 2)

因此可以看到時間複雜度t(n)是與執行次數n成正比。

一般來說,時間複雜度寫為:t(n)=o(f(n))。其中,t(n)為總的時間複雜度,f(n)是**執行的總次數之和,o表示他們成正比。

其中,o(2^n)與o(n!)是非多項式量級。

注:

i=1;

while

(i <= n)

每迴圈一次,i變為原來的2倍,2 ^0 * 2^1*…2x = n,所以x=log2n。

不管底數是2,3還是其他數,都把他表示為logn,因為對數可以相互轉換。

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

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

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

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...

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

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...