ハッシュテーブル | Programming Place Plus 用語集

トップページ用語集

名称

解説

データを、キーとをペアにした状態で管理し、キーを使って値を効率よく探索できるデータ構造です。

ハッシュテーブルは、データを登録するときに指定されたキーに、一定の計算を行って得られた値を添字として使う配列です。ここで行う計算をハッシュ関数、得られる値をハッシュ値と呼びます。ハッシュ関数が実装できるのであれば、キーはどのようなや値でも構いません。

ハッシュ関数の計算分のコストはあるものの、目的のデータの位置が計算1つで即座に定まるため、データの探索や追加、削除を圧倒的な高効率で実現できます(計算量でいえば O(1))。しかし仕組み上、異なるキーから同じハッシュ値が生成される、衝突と呼ばれる問題が起こることがあり、その際の対処による追加のコストが発生し、計算量が悪化する場合があります。

キーの分布やデータの総数があらかじめ予測可能であって、うまく配列全体にばらけて格納できるようなハッシュ関数を実装できないかぎりは、基本的に衝突の発生を避けることはできません。

衝突発生時の対処方法はいくつか知られており、連結リストを使って、同じ位置にデータをつないでいくチェイン法や、ほかの空いている場所を探す再計算(再ハッシュ)を行うオープンアドレス法などがあります。

チェイン法については、アルゴリズムとデータ構造編【探索】第6章、オープンアドレス法については第7章で解説しています。

ハッシュテーブルは、連想配列(辞書、マップ)のような、探索の効率の良さに特徴がある抽象データ型を実装する方法としてよく用いられています。

C言語の場合

C言語には、標準のハッシュテーブルはありません。

C++ の場合

C++ の標準ライブラリの std::unordered_map は、ハッシュテーブルを使って実装されています。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る