RecSplit
最小完全ハッシュを構成するアルゴリズム
再帰分割(Recursive Split)を使う
ざっくり概要
キー集合Sにランダムなハッシュを試す
Sをほぼ同じサイズの2つのバケットに分割できるまで試行する
各バケットに再帰的に同じ処理を適用する
サイズが十分小さくなったら全探索で完全ハッシュにする
構築方法
1:キー全体をhash(key) % BでB個のバケットに均等分割する
2:バケットにn個のキーが含まれるとするとき、それぞれのキーをhash(key, d) % n < n/2でLeftとRightに振り分け、LeftとRightのサイズが等しくなるdを探す
3:2の操作を再帰的に繰り返し、キー数がLEAF_SIZE以下まで小さくなったら、dを線形探索して、hash(key, d) % LEAF_SIZEがすべて異なるものを採用する
クエリ方法
ビット列からd値を取得しながら、構築時と同様に再帰的に計算する
参考資料