数ヶ月前にBK-trees (Burkhard-Keller-Trees)について読みましたが、距離計量でもう一度読みたいものを保存するのに良い方法だと言われています。したがって、類似性によって何かを取得したい場合はそれぞれ。
しかし、これらのBKツリーは私にはそれほど速くは見えません。実装を試し、いくつかの出力を行ったとき、長距離を許可するとすぐにツリー内を頻繁に移動する必要がありました(レーベンシュタインでそれを実現し、最大6回の編集を許可しました)。
もちろん、最速の実装(速度だけの場合)は、テーブル内の各エントリから各エントリまでの距離を保存し、それらを直接検索することですが、これはオーバーヘッドが大きすぎます。
したがって、タイトルにリアルを追加しました。もう少しメモリが必要なのは問題ありませんが、実装は現実的で使用可能である必要があります(このような手法については、現実的とは何かを言うのに十分な知識はありませんが、ある程度の境界があると思います)。
利用可能なBKツリーよりも速いものはありますか、それともBKは本当に山の頂上にありますか(まだ)?
シナリオ
私には実際のユースケースはありませんが、シナリオは次のとおりです。私は何かの1 mioエントリがあり、それらは互いにある程度の距離を持っています(距離関数によって定義されます)。今、私は1つのエントリを取得し、次のいずれかを知りたいと思います。
- 指定されたエントリに最もよく一致する5つのエントリ
- 他のどのエントリ(数に依存しない)が、指定されたしきい値まで同じかそれ以下であるか
データベースは関係ありません。
結局、最良のアルゴリズムは両方に一致すると思いますか?