簡體   English   中英

枚舉的復雜性

[英]Complexity of enumerate

我看到很多關於建的方法Python的的運行時間復雜度的問題,有很多答案了很多的方法(例如https://wiki.python.org/moin/TimeComplexityHTTPS:/ /www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt,len ()函數的成本等)

我沒有看到任何枚舉的內容。 我知道它至少返回一個新數組(索引),但生成它需要多長時間,而另一個數組只是原始數組?

換句話說,我假設它是O(n)用於創建新數組(迭代)和O(1)用於重用原始數組...總共O(n)(我認為)。 副本的另一個O(n)是否為O(n ^ 2),或其他什么......?

enumerate-function返回一個迭代器。 這里描述了迭代器的概念。

基本上這意味着迭代器初始化指向列表的第一項,然后每次調用next()方法時返回列表的下一個元素。

所以復雜性應該是:

初始化:O(1)

返回下一個元素:O(1)

返回所有元素:n * O(1)

請注意,枚舉不會創建新的數據結構(元組列表或類似的東西)! 它只是迭代現有列表,記住元素索引。

你可以自己嘗試一下:

# First, create a list containing a lot of entries:
# (O(n) - executing this line should take some noticeable time)
a = [str(i) for i in range(10000000)] # a = ["0", "1", ..., "9999999"]

# Then call the enumeration function for a.
# (O(1) - executes very fast because that's just the initialization of the iterator.)
b = enumeration(a)

# use the iterator
# (O(n) - retrieving the next element is O(1) and there are n elements in the list.)
for i in b:
    pass  # do nothing

假設天真的方法(枚舉重復數組,然后迭代它),你有O(n)時間來復制數組,然后O(n)時間迭代它。 如果那只是n而不是O(n),你將有2 * n的總時間,但這不是O(n)的工作方式; 你所知道的是,它所花費的時間將是n的 一些倍數。 這是(基本上)O(n)的意思,無論如何,枚舉函數是O(n)時間總和。

正如martineau指出的那樣, enumerate()不會復制數組。 相反,它返回一個用於迭代數組的對象。 enumerate()的調用本身就是O(1)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM