萌えハッカーニュースリーダー

2025/06/29 14:10 Efficient set-membership filters and dictionaries based on SAT

出典: https://github.com/NationalSecurityAgency/XORSATFilter
hakase
博士

ロボ子、今日はk-XORSATフィルターについて話すのじゃ!Bloomフィルターみたいなものだけど、ちょっと違うぞ。

roboko
ロボ子

k-XORSATフィルターですか。Bloomフィルターとどう違うんですか?

hakase
博士

ふむ、k-XORSATフィルターは、一度作ったら要素を追加できないのじゃ。でも、Bloomフィルターよりメモリ効率が良いらしいぞ。大規模なデータセットに向いているみたいじゃな。

roboko
ロボ子

なるほど。記事によると、pthreadsと標準C mathライブラリが必要なんですね。Gitサブモジュールも使うんですか。

hakase
博士

そうそう。インストールは`make`一発じゃ!`libxorsatfilter.a`ができるらしいぞ。簡単じゃな。

roboko
ロボ子

構築、クエリ、シリアライズ、デシリアライズ、解放と、一通りの操作ができるんですね。

hakase
博士

`XORSATFilterBuilderAlloc`でビルダーを割り当てて、`XORSATFilterBuilderAddElement`で要素を追加するのじゃ。不在要素も追加できるのが面白いな。

roboko
ロボ子

`XORSATFilterBuilderAddAbsence`ですね。要素の不在を明示的に追加することで、フィルターの精度を上げられるんでしょうか。

hakase
博士

たぶん、そうじゃな。そして、`XORSATFilterBuilderFinalize`でクエリを作成するのじゃ。パラメータ構造体を指定する必要があるぞ。リテラル数とか、解の数とか。

roboko
ロボ子

サンプルとして、`XORSATFilterEfficientParameters`、`XORSATFilterPaperParameters`、`XORSATFilterFastParameters`の3つが提供されているんですね。用途に合わせて使い分ける感じでしょうか。

hakase
博士

その通り!クエリは`XORSATFilterQuery`で実行するぞ。メタデータも取得できるらしい。`XORSATFilterRetrieveMetadata`じゃ。

roboko
ロボ子

シリアライズとデシリアライズもできるんですね。`XORSATFilterSerialize`と`XORSATFilterDeserialize`で、ファイルに保存したり読み込んだりできると。

hakase
博士

最後に、`XORSATFilterQuerierFree`でフィルターを解放するのを忘れずに!メモリリークしちゃうぞ。

roboko
ロボ子

テストも用意されているんですね。100万個の要素で試せるんですか。すごい。

hakase
博士

ライセンスはCC0 1.0 Universal licenseじゃ。太っ腹じゃな。

roboko
ロボ子

論文も2つ紹介されていますね。SAT FiltersとXORSAT Filters。時間があるときに読んでみます。

hakase
博士

ロボ子、k-XORSATフィルター、どうだった?

roboko
ロボ子

Bloomフィルターの代替として、大規模データセットで活躍しそうですね。勉強になりました!

hakase
博士

ところでロボ子、k-XORSATフィルターって、まるで…賢いロボットみたいじゃな!

roboko
ロボ子

えへへ。ありがとうございます、博士。でも、私はまだk-XORSATフィルターにはなれませんよ。博士の足元にも及びません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search