web-dev-qa-db-ja.com

辞書とハッシュテーブルの真の違いは何ですか?

私はいつも辞書を使ってきました。私はPythonで書きます。

41
TIMEX

辞書は、キーを値にマップする一般的な概念です。このようなマッピングを実装するには多くの方法があります。

ハッシュテーブルは、辞書を実装する特定の方法です。

ハッシュテーブルの他に、辞書を実装するもう1つの一般的な方法は red-black trees です。

それぞれの方法には独自の長所と短所があります。赤黒木は常にO(log N)で検索を実行できます。ハッシュテーブルはO(1)時間でルックアップを実行できますが、入力によってはO(N)に低下する可能性があります。

196

辞書は、キーを値にマップするデータ構造です。

ハッシュテーブルは、キーのハッシュ値を(それにいくつかのハッシュ関数を適用して)取得し、1つ以上の値が格納されているバケットにマッピングすることによって、キーを値にマッピングするデータ構造です。

IMOこれは、リストとリンクリストの違いを尋ねるのに似ています。

明確にするために、Pythonは現在ハッシュテーブルを使用してディクショナリを実装している場合があり、将来的にはPython辞書を辞書として停止させることなく、その事実を変更します。

28
danben

wikipedia が教えてくれるように、「辞書」はいくつかの異なる意味を持っています-「連想配列」、Pythonが用語( 「マッピング」として知られる)は、これらの意味の1つです(ただし、「データディクショナリ」、およびパスワード推測試行における「ディクショナリ攻撃」も重要です)。

ハッシュテーブルは重要なデータ構造です。 Pythonは、これらを使用して、2つの重要な組み込みデータ型、dictおよびsetを実装します。

したがって、Pythonでも、「ハッシュテーブル」を「辞書」の同義語と見なすことはできません。同様のデータ構造が「セット」の実装にも使用されているためです!-)

16
Alex Martelli

Python辞書は内部的にハッシュテーブルで実装されています。

10
Nicolás

ハッシュテーブルは常に、値を操作する関数を使用して、値が格納される場所を決定します。ディクショナリ(あなたが意図していると思います)はより一般的な用語であり、単に参照メカニズムを示します。これは、ハッシュテーブルである場合や、格納場所を決定するときに値自体を考慮しない単純な構造で実装される場合があります。

辞書はハッシュテーブルを使用して実装されます。私の意見では、2つの違いは、スタックを実装するために配列を使用する場合のスタックと配列の違いと考えることができます。

0
Thunderhashy