几个月前我读到了BK-trees (Burkhard-Keller-Trees),据说这是一种保存你想通过distance-metrics再次读出的东西的好方法。因此,在每种情况下,您都想通过相似性检索某些东西。
然而,这些 BK 树对我来说似乎并不快。当我尝试一个实现并进行一些输出时,只要我允许更长的距离,它就必须在树中四处走动(我用 levenshtein 验证了它并允许最多 6 次编辑)。
最快的实现(如果它只是关于速度的话)当然是将每个条目的距离存储在一个表中并直接查找它们,但这是太多的开销。
因此,我在标题中添加了现实主义。需要更多内存是可以的,但实现应该仍然是现实的和可用的(我对这些技术的了解不够多,无法说出什么是现实,但我想有一些边界)。
有没有比 BK-trees 更快的东西,或者 BK 真的是山顶(还)?
设想
我没有真正的用例,但场景如下:我有 1 个 mio 条目,它们彼此之间有一定的距离(由距离函数定义)。现在我得到一个条目并想知道:
- 哪 5 个条目与给定条目最匹配
- 哪些其他条目(与数量无关)低于或等于给定阈值
数据库无所谓。
我猜最终最好的算法会同时匹配两者吗?