? ? ?? 對pyhon算法的研究使我熱愛這門編程語言琳骡,在我的計(jì)算機(jī)生涯中用過很多種語言弯淘,但對于快速構(gòu)造原型的能力颜武,沒有任何一種能夠和python相比您觉。
??? 假設(shè)你有一個(gè)含有重復(fù)子項(xiàng)的序列拙寡,你想以最快的速度消除其中的重復(fù),同時(shí)還不用了解許多關(guān)于序列中的元素屬性信息琳水。另外肆糕,你并不關(guān)心最后序列中的元素順序。面對這樣的一個(gè)問題在孝,在python算法中應(yīng)該如何處理呢诚啃?
??? 首先,在一個(gè)序列中消除重復(fù)的最快速方法取決于序列元素對一些微妙特性私沮。例如始赎,它們是否是可哈希的,它們是否支持比較仔燕。我們可以使用unique函數(shù)嘗試三種方式造垛,從最快的到最慢的,并讓運(yùn)行時(shí)異常來決定最適合此序列的方法晰搀。
???? 要獲得最快的速度五辽,序列中所有元素都必須支持哈希,如果它們是可哈希的外恕,則unique函數(shù)的工作時(shí)間是線性的杆逗,即直接正比于輸入序列中元素的數(shù)目。
???? 如果發(fā)現(xiàn)對元素進(jìn)行哈希操作是不可能的鳞疲,下一個(gè)最好的情況是序列中的元素都支持排序罪郊。如果排序也是不可能的,那么序列元素至少要支持相等測試建丧,否則重復(fù)多概念對于它們是沒有意義的排龄。
??? 我們再來看一下實(shí)現(xiàn)FIFO容器波势。就是需要一個(gè)支持插入和刪除元素的容器翎朱,而且第一個(gè)插入到元素也是第一個(gè)被刪除到橄维,即先進(jìn)先出隊(duì)列。
? ? 我們可以做出一個(gè)python風(fēng)格的實(shí)現(xiàn)拴曲,通過兩個(gè)單項(xiàng)鏈表争舞,用前端鏈表和后端鏈表的方法創(chuàng)建一個(gè)FIFO。代碼如下:
??? class Fifo (list):
??? def_ _init_ _(self):
???????????? self.back =[??? ]
???????????? self.append = self.back.append
??????? def? pop (self):
???????????????? if not self:
??????????????????????? self back.reverse(? )
?????????????????????? self[ : ] = self.back
?????????????????????? del self.back[ : ]
???????????????? reture super (Fifo ,self). pop(? )
這就是在python中fifo容器的實(shí)現(xiàn)方法之一澈灼。
未完待續(xù)*\(^o^)/*