N 個の固定長文字列を持つデータベースがあります。同じ長さのクエリ文字列があります。問題は、q までのハミング距離が最も小さい最初の k 個の文字列をデータベースから取得することです。
N は小さく (約 400)、文字列は長く、長さは固定されています。データベースは変更されないため、インデックスを事前に計算できます。クエリは大きく異なります。キャッシングや事前計算はオプションではありません。毎秒たくさんあります。k-1 の結果が 0 に一致する場合でも、常に k の結果が必要です (ハミング距離でソートし、最初の k を取得するため、局所性に依存するハッシュや同様のアプローチでは実行できません)。kd-tree および同様のスペース分割は、おそらく線形検索よりもパフォーマンスが低下します (文字列は非常に長くなる可能性があります)。BK-tree が現時点では最良の選択ですが、必要以上に遅く複雑です。
実際のハミング距離を計算するために k <= t << N エントリを残して、ほとんどのエントリを非常に少ないステップで破棄するインデックスを構築するアルゴリズムがあるように感じます。
レーベンスタイン距離に基づくファジー文字列マッチングを提案する人々 - ありがとう、しかし問題ははるかに単純です。一般化された距離メトリック ベースのアプローチ (BK ツリーなど) は優れていますが、上記の事実を利用するものがあるかもしれません (小さな DB/長い固定サイズの文字列、単純なハミング距離)
リンク、キーワード、論文、アイデア?=)