【发布时间】:2016-12-16 11:50:00
【问题描述】:
有一个包含 N 个固定长度字符串的数据库。 有一个相同长度的查询字符串。 问题是从数据库中获取到 q 的汉明距离最小的前 k 个字符串。
N 很小(大约 400),字符串很长,长度固定。数据库不会改变,所以我们可以预先计算索引。查询差异很大,缓存和/或预计算不是一种选择。每秒有很多。我们总是需要 k 个结果,即使 k-1 个结果匹配 0(按汉明距离排序并取第一个 k,因此局部敏感散列和类似方法不会这样做)。 kd-tree 和类似的空间分区可能会比线性搜索执行得更差(字符串可能很长)。 BK-tree 目前是最好的选择,但它仍然比它需要的慢和复杂。
感觉就像有一种算法,它会建立一个索引,它会在很少的步骤中丢弃大部分条目,留下 k
人们建议基于 Levenstein 距离进行模糊字符串匹配 - 谢谢,但问题要简单得多。基于广义距离度量的方法(如 BK-trees)很好,但也许有一些利用上述事实的东西(小 DB/长固定大小的字符串,简单的汉明距离)
链接、关键字、论文、想法? =)
【问题讨论】:
-
对于有界汉明距离方法,请参阅此答案stackoverflow.com/a/47487949/302521
标签: sorting pattern-matching hamming-distance