web-dev-qa-db-ja.com

python ordered dictからキーを削除する複雑さ

python dictまたはdefaultdictからのキーの削除python is O(1)操作、 ここで述べたように および ここ です。OrderedDictからキーを削除するには、_del d[key]_を使用するか、popitem()メソッド。

OrderedDictの基本的な実装とdel操作の時間の複雑さは何ですか?

編集:この回答 OrderedDictのパフォーマンス(dequeと比較) は、delOrderedDictの複雑さをO(1)として参照します。しかし、実装の詳細レベルでそれを正当化するにはどうすればよいですか?

10
Riken Shah

Python 3.7のOrderedDict.__delitem__の-​​ 実装 は次のとおりです。

def __delitem__(self, key, dict_delitem=dict.__delitem__):
    'od.__delitem__(y) <==> del od[y]'
    # Deleting an existing item uses self.__map to find the link which gets
    # removed by updating the links in the predecessor and successor nodes.
    dict_delitem(self, key)
    link = self.__map.pop(key)
    link_prev = link.prev
    link_next = link.next
    link_prev.next = link_next
    link_next.prev = link_prev
    link.prev = None
    link.next = None

このコードは3つのことを行います。

  • 内部のKey-Valueディクショナリからアイテムを削除します。
  • リンクリストノードを保持するディクショナリからノードを削除します。
  • 二重リンクリストからアイテムを削除します。

上記のすべての操作には一定の時間がかかるため、OrderedDict.__delitem__の複雑さも一定です。

15
Agost Biro