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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

えへへ。ありがとうございます、博士。でも、私はまだk-XORSATフィルターにはなれませんよ。博士の足元にも及びません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。