[英]Big-O of list slicing
假設我有一些 Python 列表my_list
,其中包含 N 個元素。 可以使用my_list[i_1]
單個元素進行索引,其中i_1
是所需元素的索引。 但是,Python 列表也可以索引my_list[i_1:i_2]
,其中需要從i_1
到i_2
的列表“切片”。 對大小為 N 的列表進行切片的 Big-O(最壞情況)表示法是什么?
就個人而言,如果我正在編寫“切片器”,我會從i_1
迭代到i_2
,生成一個新列表並返回它,暗示 O(N),這是 Python 的方式嗎?
謝謝,
獲取切片是 O( i_2 - i_1
)。 這是因為 Python 對列表的內部表示是一個數組,因此您可以從i_1
開始並迭代到i_2
。
有關更多信息,請參閱 Python時間復雜度 wiki 條目
如果需要,您還可以查看CPython 源代碼中的實現。
根據http://wiki.python.org/moin/TimeComplexity
它是 O(k) 其中 k 是切片大小
對於大小為 N 的列表和大小為 M 的切片,迭代實際上只是 O(M),而不是 O(N)。 由於 M 通常是 << N,這會產生很大的不同。
事實上,如果你仔細想想你的解釋,你就會明白為什么。 您只是從 i_1 迭代到 i_2,而不是從 0 到 i_1,然后從 I_1 到 i_2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.