単語あたり11ナノ秒、アナグラム探索を極限まで最適化する

11 Nanoseconds per Word: Over-Optimizing Anagrams

単語あたり11ナノ秒、アナグラム探索を極限まで最適化する

Word Ladderのアナグラム変異に対応するため、Dave AndersenがRustでアナグラム辞書の構築を最適化した記録。文字列ソートによる素朴な実装は1語173ナノ秒だったが、Vec確保の排除、文字カウントのu128パック、rustc_hashへの切り替えを経て、各文字に素数を割り当てたゲーデル数方式で衝突のない64ビット識別子を実現。最終的に1語13ナノ秒まで高速化した。

素朴に「a→2、b→3、c→5」と割り当てると、辞書の365番目の単語「ABORTIVENESSES」で64ビットをあふれてしまう。しかもこれはまだ14文字だ。

この日のほかの記事

2026-11-05