簡體   English   中英

列表切片的大O

[英]Big-O of list slicing

假設我有一些 Python 列表my_list ,其中包含 N 個元素。 可以使用my_list[i_1]單個元素進行索引,其中i_1是所需元素的索引。 但是,Python 列表也可以索引my_list[i_1:i_2] ,其中需要從i_1i_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.

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