2011-09-08 94 views
32

Big O表示法中每個Python集合操作的時間複雜度是多少?Python集操作的時間複雜度?

我使用Python的set type進行大量項目的操作。我想知道每個操作的性能如何受設置大小的影響。例如,add,並在成員測試:

myset = set() 
myset.add('foo') 
'foo' in myset 

周圍的Googling還沒有打開任何資源,但它似乎是合理的,對於Python的一套執行的時間複雜度會被慎重考慮。

如果存在,像this這樣的鏈接會很好。如果沒有這樣的事情,那麼我們可以解決這個問題嗎?

用於查找時間複雜度的額外標記全部設置操作。

+2

雖然GWW的鏈接非常豐富,但您可以通過理解它們僅僅是python字典的特殊情況(鍵,但沒有值)來推斷python集的時間複雜性。所以,如果你知道散列圖上操作的時間複雜性,那麼你幾乎就在那裏。 – Wilduck

回答

3

操作in應該獨立於他的容器大小,即。 O(1) - 給定最佳散列函數。對於Python字符串,這應該是。散列字符串總是至關重要的,Python應該很聰明,因此您可以期待近乎最佳的結果。

10

根據Python wiki: Time complexity,集合實現爲hash table。因此,您可以期望在O(1)平均值中查找/插入/刪除。除非你的哈希表的加載因子太高,否則你面對碰撞和O(n)。

P.S.由於某種原因,他們聲稱O(n)是刪除操作,看起來像是一個錯誤類型。

P.P.S. CPython是這樣,pypy是different story