ハッシュ表の解説(基本情報技術者シラバス用語)

ハッシュ表の解説(基本情報技術者シラバス用語)
目次

ハッシュ表とは

ハッシュ表の基本と応用.png

ハッシュ表(Hash Table)とは、「ハッシュ関数」と呼ばれる特別な計算式を用いて、探したいデータの「キー(名前など)」から、そのデータが格納されるメモリ上の「アドレス(インデックス番号)」を直接算出して管理するデータ構造です。最初からデータの場所が計算で分かるため、データ数が膨大になっても、データの追加や検索をほぼ一瞬(一定時間)で行うことができます。

具体例

会員名簿データベースで、「会員ID」をハッシュ関数に入力すると「保存されている部屋の番号」が計算され、そこから直ちに会員の住所や名前を引き出せる仕組みです。余計な比較を行わず目的地へ直行できます。

// ハッシュテーブルの検索イメージ
let userMap = {
    "user123": {"name": "鈴木", "age": 25},
    "user456": {"name": "田中", "age": 30}
};
console.log(userMap["user123"].name); // 出力: "鈴木" (キーを指定して直ちに取得)

もう少し詳しく

ハッシュ表(Hash Table)は、キー(Key)と値(Value)のペアを効率的に格納し、高速に検索するためのデータ構造です。データを格納する際、キーとなる情報(文字列や数値など)を「ハッシュ関数」と呼ばれる特殊な関数に入力し、固定長の整数値(ハッシュ値)を得ます。このハッシュ値を配列の「インデックス(格納アドレス)」として使用し、その位置に値を保存します。この仕組みにより、データの検索時にはキーをハッシュ関数に通すだけで格納先のアドレスが一発で判明するため、データ数がどれだけ増えても、ほぼ一定の時間(計算量O(1))で瞬時に目的のデータにアクセスできます。ただし、異なるキーから同じハッシュ値が計算されてしまう「ハッシュ衝突(コリジョン)」という問題が必ず発生するため、同じアドレスにリストを繋いでいく「チェイン法」や、空いている別のアドレスを探す「オープンアドレス法(クローズドハッシュ法)」などの衝突回避策をあらかじめ組み込んでおく必要があります。

試験でのポイント

試験では、ハッシュ表の基本原理(キーからハッシュ値を作成し、それを格納先インデックスとする)に加えて、「ハッシュ衝突(衝突/コリジョン)」が発生したときの解決方法である「チェイン法(連結リストで繋ぐ)」と「オープンアドレス法(再ハッシュ等で空きを探す)」のそれぞれの特徴を理解しておくことが求められます。また、ハッシュ関数の要件として「計算が高速であること」や「ハッシュ値が均一に分散すること(特定の場所に偏らないこと)」といった性質についての選択肢もよく登場します。

関連する用語

ハッシュ関数(任意のデータを固定長の数値に変換する関数)、ハッシュ衝突(異なるキーから同一のハッシュ値が生成されてしまう現象)、チェイン法(ハッシュ衝突時にデータを連結リストで繋ぐ回避策)。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ