Python數(shù)據(jù)結(jié)構(gòu) 第二章--算法分析

本章節(jié)主要內(nèi)容:

一、了解為何算法分析的重要性

二、用大“O”表示法來描述算法執(zhí)行時(shí)間

三、了解在Python列表和字典類型中通用操作用大“O”表示法表示的執(zhí)行時(shí)間

四、了解Python數(shù)據(jù)類型的具體實(shí)現(xiàn)對(duì)算法分析的影響

五、了解如何對(duì)簡(jiǎn)單的Python程序進(jìn)行執(zhí)行時(shí)間檢測(cè)


主要知識(shí)點(diǎn)如下:

1)算法分析主要就是從計(jì)算資源的消耗的角度來評(píng)判和比較算法。我們想要分析兩種算法并且指出哪種更好,主要考慮的是哪一種可以更高效地利用計(jì)算資源。或者占用更少的資源。

2)一種簡(jiǎn)單的計(jì)算程序時(shí)間復(fù)雜度的方式就是通過統(tǒng)計(jì)程序運(yùn)行的時(shí)間來進(jìn)行比較,在python中有一個(gè)time模塊,通過調(diào)用time的time函數(shù)來獲取時(shí)間,在程序運(yùn)行開始和結(jié)尾時(shí)分別調(diào)用這個(gè)函數(shù)就可以獲知程序的運(yùn)行時(shí)間。

3)有時(shí)候?qū)τ谕粋€(gè)任務(wù),采用不同的計(jì)算方法產(chǎn)生的結(jié)果相同但是時(shí)間消耗卻差別很大,舉個(gè)例子,計(jì)算1+2+3+...n

方法一:

def sum1(n):

? ? sum = 0

? ? for i in range(n):

? ? ? ? sum += i

? ? return sum

方法二:

def sum2(n):

? ? sum = n*(n-1)/2

? ? return sum

在上邊兩個(gè)方法中隨著n的增大,sum2運(yùn)行時(shí)間沒有變大,而sum1的運(yùn)行時(shí)間越來愈大。

在后面我們可以知道,sum1的運(yùn)行時(shí)間為1+n,因此時(shí)間復(fù)雜度是O(n)

sum2的運(yùn)行時(shí)間為1,因此其時(shí)間復(fù)雜度為O(1)

(4)Python中列表是一個(gè)很常用的數(shù)據(jù)結(jié)構(gòu),在列表中有一個(gè)pop方法對(duì)列表進(jìn)行pop元素操作,ls.pop(n)移除ls中第n個(gè)元素并返回移除的元素,pop()默認(rèn)移除最后一個(gè)元素,pop(0)移除第一個(gè)元素。

pop()的時(shí)間復(fù)雜度是O(1)

pop(0)的時(shí)間復(fù)雜度是O(n)

列表常用時(shí)間復(fù)雜度表對(duì)照


(5)Python中字典是一個(gè)很常用的數(shù)據(jù)結(jié)構(gòu)。那么字典中的操作的時(shí)間復(fù)雜度是怎么樣的呢,由于字典是通過key來訪問元素,其訪問和賦值都是O(1)的時(shí)間復(fù)雜度。

字典常用操作復(fù)雜度


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容