演算法 時間複雜度(一)

2021-09-17 21:13:05 字數 1892 閱讀 3972

## 概念簡述

## 明確

## 舉例分析

## 理論分析

演算法複雜度分為時間複雜度空間複雜度。時間複雜度是指執行演算法所需要的計算工作量,在計算機

科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間,是乙個關於代表演算法輸入值

的字串的長度的函式。時間複雜度常用大o符號表述,如:o(1)、o(n)、o(lgn)、o(n^2)等。不包括這個

函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無

窮時的情況

1.  o 描述的是乙個演算法或操作的漸進時間複雜度,即所耗費時間與輸入資料規模間的關係

2.  一般來說,n處於趨近於無窮的情況下

簡單來說 "o" 描述的是演算法的執行時間與輸入資料之間的關係,如:

// 求和:o(n),其中定義n為nums中的元素個數

public static int sum (int nums)

忽略常數條件下,此演算法執行時間與nums元素個數呈線性關係(n的冪為一次方),即nums中元素個數越

多,將導致演算法的執行時間變長

分析

針對於線性方程t = c1*n + c2

演算法中諸如通過遍歷nums從中獲取元素、將 sum 與 num 進行求和等操作所消耗的總時間視為 c1,

諸如初始化 sum、返回 sum 等操作視為 c2,故此演算法實際消耗時間為 c1*n + c2

針對於此演算法:

如果我們在分析演算法時將 c1 與 c2 具體值也一同分析出來,一方面必要性不大,另一方面有些情況

下也是不可能的,如通過遍歷取出 nums 中元素的操作,不同的語言不同的實現實際執行的時間也

是不等的同時也受制於計算機自己的配置與效能,故不可能精確地判斷出 c1 與 c2 的數值,這也是

為什麼我們在一開始宣告忽略常數的原因。

經過上述分析,也就是忽略常數的情況下,假如兩個演算法耗費時間如下:

t = 2 * n + 2

t = 2000 * n + 10000

那麼這兩個演算法在o的意義下都是o(n)線性時間的演算法的演算法,即消耗的時間與輸入資料的規模之間

呈線性關係。

而對演算法:

t = 1 * n * n + 0

此演算法時間複雜度為o(n^2),即消耗的時間與輸入資料的規模之間呈平方關係,也就是說大概率情況

下此演算法的效能要低於上方兩者

另外針對於演算法:

t = 2 * n * n + 300 * n + 10

此演算法時間複雜度仍為o(n^2),因為n趨近於無窮,此時低階項 300*n 將被忽略。

[注意]:

1. 雖然並不代表對於任意輸入來說o(n)要優於o(n^2),但是n更準確的含義為漸進時間複雜度,實際上描

述的是當n趨近於無窮的情況,此時o(n)必然是優於o(n^2)的。

2. 通常來說,n越大,乙個低階時間複雜度演算法的優勢將更容易顯現出來

3. 因為或多或少也受常數的影響,有些時候在實際的工程中,也會利用當n較小時高階演算法可能優於低階

演算法的情況

演算法時間複雜度 一

演算法時間複雜度的定義 在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度記作 t n o f n f n 是問題規模n的某個函式。執行次數 時間 如何分析乙個演算法的時間複雜度 o階推導法 用常數1取代執行時...

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

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

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

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