假设您有10,000个电子邮件地址的列表,并且想查找该列表中最接近的“邻居”是什么-定义为可疑地与列表中其他电子邮件地址接近的电子邮件地址。
我知道如何计算两个字符串之间的Levenshtein距离(由于这个问题,这使我获得了将一个字符串转换为另一个字符串需要进行多少次操作的评分。
假设我将“可疑地接近另一个电子邮件地址”定义为两个Levenshtein得分小于N的字符串。
除了将列表中每个可能的字符串与其他可能的字符串进行比较之外,是否还有一种更有效的方法来查找分数低于此阈值的字符串对?换句话说,这种类型的问题可以比解决问题更快O(n^2)吗?
O(n^2)
对于这个问题,Levenshtein评分算法的选择不正确吗?
是的-您可以使用BK-Tree在O(log n)时间内找到字符串给定距离内的所有字符串。对于levenshtein距离1,涉及生成距离为n的每个字符串的替代解决方案可能会更快,但是对于更长的距离,工作量会迅速失控。