辞書に対してキャッシュを埋め込むことにより,検索時間の短縮に成功しました. 概要 基本的な考え方は,到達確率の高いノードについて,遷移に必要な情報をダイレクトマップ方式で保存しておくというものです.到達確率については,辞書を構築するときに計算する重みを利用しました. キャッシュにヒットしたときは,rank() や select() が必要なくなるので,計算コストが小さくなります.また,本来なら別の領域にある情報をキャッシュにまとめたことにより,CPU キャッシュの利用効率も向上しています. 実験結果 以下,現状での実験結果です. ノードの並びを重み順にしたとき,デフォルトの設定(Normal cache)では,辞書のサイズが 2% くらい大きくなるものの,検索時間を 10-20% くらい短縮できました.悪くないバランスだと思います. さらにキャッシュを大きくして検索時間を短縮することも可能