本章節(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ù)雜度
