情報科学 › アルゴリズムとデータ構造 › 探索アルゴリズム

オープンアドレス法

定義 6.1(「探索アルゴリズム」§6)

n≤mn \le m とし、すべてのキーを表 T[0..m−1]T[0..m-1] に直接格納します。探査関数 h:U×{0,1,…,m−1}→{0,…,m−1}h : U \times \{0, 1, \ldots, m-1\} \to \{0, \ldots, m-1\} を、各キー kk について探査列 ⟨h(k,0),h(k,1),…,h(k,m−1)⟩\langle h(k,0), h(k,1), \ldots, h(k,m-1)\rangle が {0,…,m−1}\{0, \ldots, m-1\} の並べ替えになるように定めます。

  • 挿入:i=0,1,2,…i = 0, 1, 2, \ldots の順に T[h(k,i)]T[h(k,i)] を調べ、最初に見つかった空スロットに置く。
  • 探索:同じ順に調べ、キーが一致すれば成功。空スロットに当たったら「無い」と答えて終了する。

代表的な探査法は次の 3 つです。

  • 線形探査:h(k,i)=(h′(k)+i) mod mh(k,i) = (h'(k) + i) \bmod m
  • 二次探査:h(k,i)=(h′(k)+c1i+c2i2) mod mh(k,i) = (h'(k) + c_1 i + c_2 i^2) \bmod m(c1,c2,mc_1, c_2, m は探査列が表全体を覆うように選ぶ)
  • 二重ハッシュ:h(k,i)=(h1(k)+i⋅h2(k)) mod mh(k,i) = (h_1(k) + i \cdot h_2(k)) \bmod m(h2(k)h_2(k) は mm と互いに素でなければならない。mm を素数にして 1≤h2(k)≤m−11 \le h_2(k) \le m-1 とすればよい)

本文で読む(前後の説明と例)→

閉包の状態

定義

定義は閉包の起点です(証明を要しません)。

印の意味: ✓公理まで証明済み ・ △証明あり(閉包未完)・ ※主張のみ。テーマごとの集計は 閉包の状況。

これを使っている定理

証明で明示的に参照している定理は、まだありません。

関連するノック 1 問