Loading article…
二次プロービングは、ハッシュ テーブル内のハッシュ衝突を解決するためのコンピュータ プログラミングにおけるオープン アドレス指定方式です。二次プロービングは、元のハッシュ インデックスを取得し、空きスロットが見つかるまで 任意の二次多項式の連続した値を追加することで動作します。
二次プローブを使用したシーケンスの例は次のとおりです。
二次プロービングはクラスタリングが少ないため、線形プロービングの代替として推奨されることが多い。[1]二次プロービングは、連鎖などの他の多くのハッシュテーブルよりも参照の局所性が優れている。しかし、クエリの場合、二次プロービングは線形プロービングほど局所性が高くないため、設定によっては線形プロービングの方が高速になることがある。[2]
二次プロービングは1968年にウォード・ダグラス・マウラーによって初めて導入されました。[3]
二次関数
h ( k ) をハッシュ関数とし、要素k を[0, m −1]の整数に マッピングする。ここでm はテーブルのサイズである。値kのi番目のプローブ位置は関数
ここで、c 2 ≠ 0 です(c 2 = 0 の場合、h ( k , i ) は線形プローブに低下します)。与えられたハッシュテーブルでは、 c 1とc 2の値は一定のままです。
例:
- の場合、プローブ配列は
- m = 2 nの場合、定数の適切な選択はc 1 = c 2 = 1/2 です。これは、 [0, m −1] 内のiに対するh ( k , i )の値がすべて異なるためです (実際、これは [0, m −1]上の順列です[4] )。これにより、値が 1、2、3、... と増加する(三角数)のプローブシーケンスが得られます。
- 素数m > 2 の場合、 c 1とc 2のほとんどの選択により、 iが [0, ( m −1)/2]の範囲内にある場合、 h ( k , i ) が別個になります。このような選択には、 c 1 = c 2 = 1/2、c 1 = c 2 = 1、c 1 = 0、c 2 = 1 などがあります。ただし、特定の要素にはm /2 個の異なるプローブしかないため、負荷係数が 1/2 を超える場合に挿入が成功することを保証するには、他の手法が必要になります。
- ( m、n、pは2以上の整数(p = 1のときは線形プローブに低下する))の場合、すべての異なるプローブのサイクルが与えられます。これはループで次のように計算できます。
- 任意のmについて、二次プローブによる完全なサイクルは、 m を最も近い 2 の累乗に切り上げ、プローブ インデックスを計算し、の場合は反復をスキップすることで実現できます。スキップされる反復は最大で であり、これらの反復はメモリを参照しないため、ほとんどの最新プロセッサで高速に動作します。 m の切り上げは次のように計算できます。
uint64_troundUp2 ( uint64_t v ) { v -- ; v |= v >> 1 ; v |= v >> 2 ; v |= v >> 4 ; v |= v >> 8 ; v |= v >> 16 ; v |= v >> 32 ; v ++ ; v を返します。}
制限事項
交互記号
オフセットの符号が交互になっている場合 (例: +1、-4、+9、-16 など)、およびバケットの数が3 を法として 4 と合同な素数である場合 (例: 3、7、11、19、23、31 など)、最初のオフセットは一意になります (法)。[詳細な説明が必要]つまり、0 から までの順列が得られ、その結果、少なくとも 1 つ存在する限り、空きバケットが常に見つかります。
参考文献
- ^ コーメン、トーマス H.ライザーソン、チャールズ・エリック。リベスト、ロナルド・リン。スタイン、クリフォード (2009)。アルゴリズム入門(第 3 版)。ケンブリッジ、マサチューセッツ、ロンドン、イギリス:MIT Press。ISBN 978-0-262-53305-8。
- ^ Richter, Stefan; Alvarez, Victor; Dittrich, Jens ( 2015). 「ハッシュ法の7次元分析とクエリ処理への影響」VLDB Endowment の議事録。9 (3): 96–107。doi : 10.14778 /2850583.2850585。ISSN 2150-8097 。
- ^ Maurer, WD (1968). 「プログラミングテクニック: 分散ストレージ用の改良ハッシュコード」Communications of the ACM . 11 (1): 35–38. doi : 10.1145/362851.362880 . ISSN 0001-0782.
- ^ コンピュータサイエンスの芸術 第3巻 ソートと検索、第6.4章、演習20、ドナルド・クヌース
外部リンク
- チュートリアル/二次プロービング
