自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python算法中的時(shí)間復(fù)雜度

開(kāi)發(fā) 后端 算法
在實(shí)現(xiàn)算法的時(shí)候,通常會(huì)從兩方面考慮算法的復(fù)雜度,即時(shí)間復(fù)雜度和空間復(fù)雜度。顧名思義,時(shí)間復(fù)雜度用于度量算法的計(jì)算工作量,空間復(fù)雜度用于度量算法占用的內(nèi)存空間。

 在實(shí)現(xiàn)算法的時(shí)候,通常會(huì)從兩方面考慮算法的復(fù)雜度,即時(shí)間復(fù)雜度和空間復(fù)雜度。顧名思義,時(shí)間復(fù)雜度用于度量算法的計(jì)算工作量,空間復(fù)雜度用于度量算法占用的內(nèi)存空間。

[[282694]]

本文將從時(shí)間復(fù)雜度的概念出發(fā),結(jié)合實(shí)際代碼示例分析算法的時(shí)間復(fù)雜度。

漸進(jìn)時(shí)間復(fù)雜度

時(shí)間復(fù)雜度是算法運(yùn)算所消耗的時(shí)間,因?yàn)椴煌笮〉妮斎霐?shù)據(jù),算法處理所要消耗的時(shí)間是不同的,因此評(píng)估一個(gè)算運(yùn)行時(shí)間是比較困難的,所以通常關(guān)注的是時(shí)間頻度,即算法運(yùn)行計(jì)算操作的次數(shù),記為T(mén)(n),其中n稱(chēng)為問(wèn)題的規(guī)模。

同樣,因?yàn)閚是一個(gè)變量,n發(fā)生變化時(shí),時(shí)間頻度T(n) 也在發(fā)生變化,我們稱(chēng)時(shí)間復(fù)雜度的極限情形稱(chēng)為算法的漸近時(shí)間復(fù)雜度,記為O(n),不包含函數(shù)的低階和首項(xiàng)系數(shù)。

我們以如下 例子來(lái)解釋一下:

 

Python算法中的時(shí)間復(fù)雜度

 

如上例子中,我們根據(jù)代碼上執(zhí)行的平均時(shí)間假設(shè),計(jì)算 run_time(n) 函數(shù)的時(shí)間復(fù)雜度,如下:

 

 

上述時(shí)間復(fù)雜度計(jì)算公式T(n) ,是我們對(duì)函數(shù) run_time(n) 進(jìn)行的時(shí)間復(fù)雜度的估算。當(dāng)n 值非常大的時(shí)候,T(n)函數(shù)中常數(shù)項(xiàng) time0 以及n的系數(shù) (time1+time2+time3+time4) 對(duì)n的影響也可以忽略不計(jì)了,因此這里函數(shù)run_time(n) 的時(shí)間復(fù)雜度我們可以表示為 O(n)。

因?yàn)槲覀冇?jì)算的是極限狀態(tài)下(如,n非常大)的時(shí)間復(fù)雜度,因此其中存在以下兩種特性:

  • 低階項(xiàng)相對(duì)于高階項(xiàng)產(chǎn)生的影響很小,可以忽略不計(jì)。
  • 最高項(xiàng)系數(shù)對(duì)最高項(xiàng)的影響也很小,可以忽略不計(jì)。

根據(jù)上述兩種特性,時(shí)間復(fù)雜度的計(jì)算方法:

1.只取最高階項(xiàng),去掉低階項(xiàng)。

2.去掉最高項(xiàng)的系數(shù)。

3.針對(duì)常數(shù)階,取時(shí)間復(fù)雜度為O(1)。

我們通過(guò)下面例子理解一下常見(jiàn)的時(shí)間復(fù)雜度,如下:

時(shí)間復(fù)雜度:常數(shù)階 O(1)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:線性階 O(n)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:線性階 O(n)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:平方階 O(n^2)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:平方階 O(n^2)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:平方階 O(n^2)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:立方階 O(n^3)

 

Python算法中的時(shí)間復(fù)雜度

 

時(shí)間復(fù)雜度:對(duì)數(shù)階 O(logn)

 

Python算法中的時(shí)間復(fù)雜度

 

隨著問(wèn)題規(guī)模n的不斷增大,上述時(shí)間復(fù)雜度不斷增大,算法的執(zhí)行效率越低,時(shí)間復(fù)雜度排序如下:

 

Python算法中的時(shí)間復(fù)雜度

 

練習(xí)一下

如下count_sort 函數(shù)實(shí)現(xiàn)了計(jì)數(shù)排序,列表中的數(shù)范圍都在0到100之間,列表長(zhǎng)度大約為100萬(wàn)。

 

Python算法中的時(shí)間復(fù)雜度

 

如上count_sort 函數(shù)的 空間復(fù)雜度為 O(n),公式如下:

 

Python算法中的時(shí)間復(fù)雜度

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2024-04-25 08:33:25

算法時(shí)間復(fù)雜度空間復(fù)雜度

2021-01-05 10:41:42

算法時(shí)間空間

2021-09-17 10:44:50

算法復(fù)雜度空間

2021-06-28 06:15:14

算法Algorithm時(shí)間空間復(fù)雜度

2020-11-30 06:26:31

算法時(shí)間表示法

2020-02-06 13:59:48

javascript算法復(fù)雜度

2020-12-30 05:35:56

數(shù)據(jù)結(jié)構(gòu)算法

2009-07-09 10:45:16

C#基本概念復(fù)雜度遞歸與接口

2021-07-29 11:30:54

遞歸算法

2021-10-15 09:43:12

希爾排序復(fù)雜度

2024-05-20 09:04:29

時(shí)間復(fù)雜度代碼

2014-12-10 09:23:14

2022-02-13 20:04:04

鏈表節(jié)點(diǎn)代碼

2020-12-30 09:20:27

代碼

2015-10-13 09:43:43

復(fù)雜度核心

2021-04-25 14:29:02

數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)組時(shí)間復(fù)雜度

2018-12-18 10:11:37

軟件復(fù)雜度軟件系統(tǒng)軟件開(kāi)發(fā)

2019-12-24 09:46:00

Linux設(shè)置密碼

2022-08-16 09:04:23

代碼圈圈復(fù)雜度節(jié)點(diǎn)

2023-10-05 11:08:53

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)