230 likes | 379 Views
Backyard Cuckoo Hashing: Constant Worst-Case Operations with a Succinct Representation. Yuriy Arbitman , Moni Naory , and Gil Segev 東京 大学 情報科学科 今井研究室 B4 秋葉 拓 哉 <t.akiba@is.s.u-tokyo.ac.jp>. 動的辞書. キーの集合や,キー と値の関係を管理するデータ構造 普段から皆よく使っているはず C++ → std::set, std::map, …
E N D
Backyard Cuckoo Hashing:Constant Worst-Case Operationswith a Succinct Representation YuriyArbitman, MoniNaory, and Gil Segev 東京大学 情報科学科 今井研究室 B4 秋葉 拓哉 <t.akiba@is.s.u-tokyo.ac.jp>
動的辞書 • キーの集合や,キーと値の関係を管理するデータ構造 • 普段から皆よく使っているはず • C++ → std::set, std::map, … • Java → java.util.TreeMap, java.util.HashMap, ... • Ruby → ハッシュ • Python → 辞書型 • Ruby の例 (キーを文字列とした) h[“apple”] = 150 h[“banana”] = 200 puts h[“apple”]
動的辞書の教科書的な実現方法 平衡二分探索木 ハッシュ表 • 各種操作 O(log n) 時間 • 順序に関係した操作が行える • 各種操作 O(1) 期待時間 今日はこっち
本論文の貢献 • 今までは,片方を実現するものは知られていた • しかし,両方は同時に実現されていなかった • ならし定数時間ですら実現されていなかった • 例えば,チェイン法のハッシュ表は,領域効率が悪い • ポインタを陽に持つせい • 高い確率で,全ての操作は最悪定数時間 • 領域効率が情報理論的限界に近い (簡潔, Succinct) • 以上を同時に実現する動的辞書を初めて提案する
意義 なぜ最悪定数時間? ならし定数時間ではダメ? • コンピュータネットワークでの応用 • ルーターでの IP アドレス等の表引き • ネットワークを止めてしまっては困る • セキュリティ • システムの応答時間を利用した攻撃を防ぐ • もちろん,ならしで構わない応用も多い
話の流れ Cuckoo Hashing [PR01] 時間:ならし O(1) 領域:(2 + ε) n ワード De-amortized Cuckoo Hashing [ANS09] 時間:最悪 O(1) 領域:(2 + ε) n ワード Backyard Cuckoo Hashing 時間:最悪 O(1) 領域:(1 + ε) n ワード Permutation-Based Backyard Cuckoo Hashing 時間:最悪 O(1) 領域:(1 + o(1)) B ビット (B : 情報理論的下限)
今ここ! Cuckoo Hashing [PR01] 時間:ならし O(1),領域:(2 + ε) n ワード De-amortized Cuckoo Hashing [ANS09] Backyard Cuckoo Hashing CUCKOO HASHING Permutation-Based Backyard Cuckoo Hashing
Cuckoo Hashing[PaghRodler 2001] 2 つのテーブルと 2 つのハッシュ関数 高々 n 要素が挿入されるとする ε は小さい定数 検索 y サイズ n + ε の表 [PR01, Fig.1] 2 つのハッシュ関数 f1, f2 が示す値 x が対応する 2 つの場所を見る 必ず 2 回のアクセスで済む → 高速
Cuckoo Hashing[PaghRodler 2001] 挿入 [PR01, Fig.1] ぐるぐると追い出す,無理なら再構築 解析を行うと,ならし O(1) 時間
今ここ! Cuckoo Hashing [PR01] 時間:最悪 O(1),領域:(2 + ε) n ワード De-amortized Cuckoo Hashing [ANS09] Backyard Cuckoo Hashing DE-AMORTIZED CUCKOO HASHINGならし O(1) 時間 → 最悪 O(1) 時間 Permutation-Based Backyard Cuckoo Hashing
De-Amortized Cuckoo Hashing[ArbitmanNaorySegev 2009] • サイズ L (定数)のキューを用意 • O(1) で検索ができる • 挿入時の大きな仕事を避けたい • 挿入で追い出すことを一定回数繰り返す • 解決しなければ,一度キューに挿入 • 仕事が小さかった際は,キューから取り出す
Cuckoo Hashing [PR01] 今ここ! 時間:最悪 O(1),領域:(1 + ε) n ワード De-amortized Cuckoo Hashing [ANS09] Backyard Cuckoo Hashing BACKYARD CUCKOO HASHING(2+ε) ワード → (1+ε) ワード Permutation-Based Backyard Cuckoo Hashing
Backyard Cuckoo Hashing の概要 • 2 レベルに分かれている • レベル1:バケツを並べておく • レベル2:De-amortized Cuckoo Hash • レベル 1 から溢れた要素をレベル 2 に格納 [ANS10, Fig.1]
レベル 1 の詳細 高々 n 要素が挿入される ε は任意の小さい定数 • バケツサイズ d = 1/ε2 • バケツ個数 m = (1+ε) n/d • レベル 1 にはd×m = (1+ε)n ワード • 各要素をどのバケツに入れる? • 値域が [0, m) のハッシュ関数を用意 • レベル 1 からあふれるのは? • 高い確率で εn個以下 • de-amortized cuckoo hashing で管理 [ANS10, Fig.1]
改善 • 現状 • 領域:(1 + ε’) n ワード (ε’ は ε の定数倍) • 操作:O(d) = O(1/ε2) 時間 (バケツ内を全部見る) さらに 操作の時間が ε によらないようにできる
ε への依存を断ち切る • バケツの中も効率的に管理したい • バケツ内で完全ハッシュ関数を利用 • 完全ハッシュ関数 = 単射のハッシュ関数 • “2 つの条件” を満たすハッシュなら何でも利用可 • De-amortize のため,キューを用意 • キューは,全バケツで共通 • ただし,ε の値に制限をした上での構成のみを議論していた • ε = θ(√(log logn / log n))
Cuckoo Hashing [PR01] 今ここ! 時間:最悪 O(1),領域:(1 + o(1)) B ビット De-amortized Cuckoo Hashing [ANS09] Backyard Cuckoo Hashing Permutation-BasedBACKYARD CUCKOO HASHING(1+ε) ワード → (1+o(1))B ビット Permutation-Based Backyard Cuckoo Hashing
情報理論的限界 • 先ほどは (1+ε)nワードの領域を使っていた • これも今までの物より遥かに効率的 • でも,u個の物から n個を選ぶのは u C n通り • キーの定義域が u個からなるとした • よって,情報理論的な領域の限界は B= log(u C n) ≒ n log(u / n) ビット これに近づくことを目指したい
簡潔データ構造 • (1 + o(1)) Bビットに収まるデータ構造 • 漸近的に領域が最善 • それでして,効率的な操作を提供 • ハッシュ法に限らずよく研究されている • ビットベクトル • ツリー
鍵となるアイディア • ハッシュ関数の代わりに,ランダムな置換を用いる • [0, u) への全単射 • かつ,逆変換ができるものとする • 自分が入っているバケツの情報を利用する 011011 もともとのキー 1010101010 置換を適用 001011011 バケツ 001
置換の活用 • バケツの番号を活用 • バケツ番号がキー情報の一部となる • n log (n / d) ビットを保存すれば OK となる • レベル 2 の Cukcoo Hashing でも置換を利用 • やはり場所の情報をキー情報の一部とする
今日話さなかったこと • ハッシュ関数・置換のランダム性に関する議論 • 完全にランダムなハッシュ関数を効率的に得ることは容易でない • 条件を緩めたハッシュ関数等で解析を行なっている • ハッシュ関数・置換の構成に関する議論 • 解析に用いた条件を満たすハッシュ関数の実現に関しても議論している • 複雑な解析 • 実際にはもっと変数が入り乱れた議論になる
まとめ Cuckoo Hashing [PR01] 時間:ならし O(1) 領域:(2 + ε) nワード キュー De-amortized Cuckoo Hashing [ANS09] 時間:最悪 O(1) 領域:(2 + ε) nワード バケツ & 2 レベル Backyard Cuckoo Hashing 時間:最悪 O(1) 領域:(1 + ε) nワード ハッシュ関数 → 置換 Permutation-Based Backyard Cuckoo Hashing 時間:最悪 O(1) 領域:(1 + o(1)) Bビット (B : 情報理論的下限)