web-dev-qa-db-ja.com

ハッシュと辞書の違いは何ですか?

HashDictionaryの違いは何ですか?

スクリプティングのバックグラウンドから来て、私はそれらは似ていると感じていますが、正確な違いを見つけたかったのです。グーグル操作はあまり役に立ちませんでした。

48
Sairam

Hashは、プログラマがインターフェイスと実装(および完全な名前を書くのが面倒なので、代わりにHashTableの代わりに略語Hash)を使用しました。

Dictionaryは、インターフェイスの 「正しい」名前 です(= [〜# 〜] adt [〜#〜] )、つまり(通常は一意の)キーを(必ずしも一意ではない)値にマップする連想コンテナ。

ハッシュテーブルはoneこのようなディクショナリの可能な実装であり(ランタイムに関して)非常に優れたアクセス特性を提供するため、多くの場合、デフォルトの実装です。

このような実装には、2つの重要な特性があります。

  1. キーはhashableequiparableでなければなりません。
  2. エントリは辞書に特定の順序で表示されません。

(キーがハッシュ可能であることは、後で配列のインデックスとして使用されるキーから数値を計算できることを意味します。)

キーにorderingを課すディクショナリデータ構造の代替実装が存在します。これはsortedディクショナリ(および他の効率的な実装が存在しますが、通常は検索ツリーの観点から実装されます)。


要約すると:dictionaryは、キーを値にマップするADTです。このADTにはいくつかの可能な実装があり、そのうちハッシュテーブルは1つです。 Hashは誤った名称ですが、コンテキストでは、ハッシュテーブルの観点から実装された辞書と同等です。

94
Konrad Rudolph

「辞書」はコンセプトの名前です。ハッシュテーブルは可能な実装です。

8
dan_waterworth

辞書は、高速な検索/挿入に使用されるデータ構造の実装に与えられる総称です。これは、ハッシュテーブル、スキップリスト、RBツリーなどのさまざまなデータ構造を使用して実現/実装できます。ハッシュテーブルは、ディクショナリの実装を含む多くの目的に役立つ特定のデータ構造です。

7
aufather

dictionaryは、キーを使用して連想配列内の直接値を参照します。

つまり(KEY => VALUE)

ハッシュハッシュテーブルと表現されることが多く、ハッシュ関数を使用してメモリ(またはより簡単には配列)内の位置を計算します。値になります。 ハッシュは入力としてKEYを取り、出力として値を与えます。次に、その値をメモリまたは配列のインデックスに挿入します。

つまりKEY => HASH FUNCTION => VALUE

1つは直接であり、もう1つはそうではないようです。ハッシュ関数も完全ではない可能性があり、誤った値を参照するインデックスを提供する場合があります。しかし、それは修正できます。

見るのに最適な場所:ウィキペディア(連想配列およびハッシュテーブル

5
Ross