簡體   English   中英

時間復雜度:刪除雙端隊列的元素

[英]Time complexity: deleting element of deque

刪除collections.deque的元素的時間復雜度是多少?

例如:

deq = collections.deque([1, 2, 3])
del deq[1]

概括

時間復雜度為 O(n),其中 n 是到最近端點的距離。 雙端隊列的總大小無關緊要。

原因

deque的實現是一個固定長度塊的雙向鏈表。 刪除一個元素需要單獨移動刪除點和最近端點之間的所有元素。

插圖

考慮以下示例:

>>> d = deque('abcdefghijklmnop')
>>> del d[3]

出於說明目的,假設以下數據布局的塊大小為 3(實際塊大小為 64):

ab  ⇄  cde  ⇄  fgh  ⇄  ijk  ⇄  lmn  ⇄  op     # State before deletion
        ×                                     # Step 1, delete "d"
ab  ⇄  c-e  ⇄  fgh  ⇄  ijk  ⇄  lmn  ⇄  op     
       →                                      # Step 2, move "c" to right 
ab  ⇄  -ce  ⇄  fgh  ⇄  ijk  ⇄  lmn  ⇄  op  
 →                                            # Step 3, move "b" to right
a-  ⇄  bce  ⇄  fgh  ⇄  ijk  ⇄  lmn  ⇄  op  
→                                             # Step 4, move "a" to right
 a  ⇄  bce  ⇄  fgh  ⇄  ijk  ⇄  lmn  ⇄  op     # Final state after deletion     

如您所見,已刪除元素和端點之間的數據元素都必須向右移動一個。

如果“k”被刪除,元素“lmnop”將全部向左移動一位。 該算法足夠聰明,可以朝着最近的端點工作。

暫無
暫無

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

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