Java中对映射执行最佳levenshtein匹配的最佳方法

Java中对映射执行最佳levenshtein匹配的最佳方法,java,algorithm,Java,Algorithm,我有一张Java地图。我希望将源字符串与映射中的所有项目进行比较,并根据levenshtein比率算法返回最佳匹配。我想知道对列表中的每个元素执行此检查的最佳方式是什么 谢谢,Matt因为levenshtein比率取决于源和目标,所以每个源字符串的值都会改变。除非源字符串很有可能在后续搜索中重复,否则只需迭代映射元素即可。如果速度确实是个问题,请确保使用最新的Java编译器并使用优化选项。由于levenshtein比率取决于源和目标,因此每个源字符串的值都会更改。除非源字符串很有可能在后续搜索中

我有一张Java地图。我希望将源字符串与映射中的所有项目进行比较,并根据levenshtein比率算法返回最佳匹配。我想知道对列表中的每个元素执行此检查的最佳方式是什么


谢谢,Matt

因为levenshtein比率取决于源和目标,所以每个源字符串的值都会改变。除非源字符串很有可能在后续搜索中重复,否则只需迭代映射元素即可。如果速度确实是个问题,请确保使用最新的Java编译器并使用优化选项。

由于levenshtein比率取决于源和目标,因此每个源字符串的值都会更改。除非源字符串很有可能在后续搜索中重复,否则只需迭代映射元素即可。如果速度确实是个问题,请确保您使用的是最新的Java编译器并使用优化选项。

当然,如果您还没有这样做,那么请使用现成的优化Levenshtein实现,如commons lang StringUtils中的实现。

当然,如果您还没有这样做,然后使用一个现成的优化的LevsTein实现,如在Calon LangStutuLLS中。

< P>如果遍历所有MAP元素成本太高,则可以考虑使用.< /P>< P>如果遍历所有MAP元素代价太高,你可以考虑使用.

你不能用标准的地图来提高性能,只需用天真的方法顺序测试它们。


不过,有更有效的方法可以做到这一点。其中一个叫做a。基本上,您可以构造一个n向树,其边由节点之间的levenshtein距离确定。然后,您可以使用来大量减少必须搜索的节点。对于短距离,这是非常有效的。这是我不久前写的一篇文章,详细描述了它。通过一点额外的工作,您可以查询它的最近邻,而不是重复查询距离1、2等。

您将无法获得比使用标准映射更好的性能-只需使用简单的方法按顺序测试它们

不过,有更有效的方法可以做到这一点。其中一个叫做a。基本上,您可以构造一个n向树,其边由节点之间的levenshtein距离确定。然后,您可以使用来大量减少必须搜索的节点。对于短距离,这是非常有效的。这是我不久前写的一篇文章,详细描述了它。只需做一点额外的工作,就可以查询它的最近邻,而不是重复查询距离1、2等