改良されたp-fast Trie:非常に効率的なプレフィックスマッチングアルゴリズム

2025-08-10

この記事では、文字列の集合の中でクエリ文字列と最も長く一致するプレフィックス、または最も近い先行詞/後続詞を見つけるための、非常に効率的なアルゴリズムである、改良されたp-fast Trieデータ構造を紹介します。以前のバージョンと比較して、この改良版はより簡潔で、省スペースです。一意のプレフィックスごとにハッシュテーブルを使用し、各プレフィックスの可能な後続文字をビットマップで表現することで、O(log k)の時間計算量を実現します(kはキーの長さ)。先行詞の検索にはさらに多くのプローブが必要になる場合がありますが、そのパフォーマンスは従来のqp-trieを上回ります。

続きを読む

コンパイラ最適化:Lemireのほぼ除算不要な乱数生成の改善

2025-03-09

著者は、範囲内の乱数を生成するほぼ除算不要なアルゴリズム(Lemireアルゴリズム)を改良しました。以前のバージョンでは、高速パスをインライン化することでコードの肥大化を削減していましたが、コンパイラの最適化は限定されていました。著者は、上限がコンパイル時定数の場合は、棄却閾値をコンパイル時に計算でき、除算の回避は不要であることを発見しました。新しい実装では、乱数生成器への呼び出しは1回だけで、上限が2の累乗の場合は、コンパイラがループを自動的に削除します。これは昨年のバージョンよりも効率的で、著者はRustでの同様のコンパイル時最適化技術について考察しています。

続きを読む