プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データ構造における非対称ハッシュ(Asymmetric Hashing)とは?仕組みと性能評価を解説

非対称ハッシュ(Asymmetric Hashing)とは

非対称ハッシュは、複数選択ハッシング(multiple choice hashing)を発展させたハッシュ技法の一つで、チェーンの長さの偏りを抑え、検索・挿入性能を向上させることを目的としています。ここでは、非対称ハッシュの基本的な仕組みと、理論的に保証される性能について解説します。

基本構造:ハッシュテーブルの分割

非対称ハッシュでは、まずハッシュテーブル全体を d 個のブロックに分割します。各ブロックの長さは n/d となります。

このとき、探査値(probe value)xi(0 ≤ i ≤ d−1)は、以下の範囲から一様ランダムに選択されます。

$$\left\{ \frac{i \cdot n}{d},\ \ldots,\ \frac{(i+1) \cdot n}{d} - 1 \right\}$$

つまり、各探査値はそれぞれ異なるブロックの中から独立に決められる点が、通常の複数選択ハッシングとの大きな違いです。

挿入アルゴリズム

要素 x を挿入する手順は、複数選択ハッシングと同じ考え方に基づいています。

  1. リスト A[x0]、A[x1]、…、A[xd−1] の長さをそれぞれ調べる。
  2. x を最も短いリストに追加する。

複数のリストが同率で最短となった場合(タイのとき)は、添字(インデックス)が最も小さいリストに挿入されます。この「最短リストへの挿入」というシンプルな戦略が、全体のバランスを保つ鍵となります。

最長リスト長の期待値

Vocking の解析によれば、非対称ハッシュにおける最長リストの長さ W の期待値 E[W] は、次のように上から抑えられます。

$$E[W] \leq \frac{\ln \ln n}{d \cdot \ln \phi_{2}} + O(1)$$

ここで登場する関数 φd は黄金比の一般化であり、d = 2 の場合には黄金比そのものと一致します。

$$\phi_{2} = \frac{1 + \sqrt{5}}{2}$$

まとめ

非対称ハッシュは、テーブルを d 個のブロックに分割し、各ブロック内から候補位置を選び、最短のリストへ要素を挿入することでチェーンの偏りを防ぐ手法です。最長リスト長の期待値が ln ln n / (d ln φ2) + O(1) に抑えられることが理論的に示されており、大規模なデータに対しても安定した高性能な検索を実現できることが分かります。

  1. Rツリー(R-Tree)とは?空間データ構造の基本とクアッドツリーとの違いを徹底解説

    本記事では、Rツリー(R-Tree)というデータ構造について詳しく解説します。Rツリーは、空間データのインデックスを効率的に格納するために設計された木構造であり、空間的な検索やデータの保存において非常に有用な仕組みです。Rツリーは現実世界のさまざまな場面で活用されており、主な応用例は以下の通りです。多次元情報のインデックス化ゲームデータの管理地理空間座標(ジオスペーシャルデータ)の保持仮想マップの実装Rツリーの構造例以下に、Rツリーによる空間データの表現例を示します。この空間データに対応するRツリーの構造は次のようになります。Rツリーの主な特性Rツリーには、以下のような重要な特性があります。R

  2. ハーフエッジデータ構造(HalfedgeDS)とは?基本概念とCGAL実装例をわかりやすく解説

    はじめにテンプレートパラメータとして用いられるハーフエッジデータ構造(Halfedge Data Structure、略称 HalfedgeDS)は、頂点・辺・面の接続情報(インシデンス情報)を管理できる、辺を中心としたデータ構造として定義されています。平面地図(planar map)や多面体など、任意の次元空間に埋め込まれた向き付け可能な2次元曲面の表現に適した構造です。このデータ構造では、各辺が逆向きの向きを持つ2つのハーフエッジ(半辺)に分割されます。各ハーフエッジは、隣接する1つの面と1つの頂点への参照を保持し、逆に各面および各頂点にも、それぞれ1つの接続ハーフエッジが格納されます。さ