在Ruby中,我有一个由大约一百万个名为dictionary_array
的字符串组成的数组。我有另一个数组,包含大约数千个名为arr
的字符串。
对于arr
中的每个元素,我想在dictionary_array
中找到最接近的元素。
迭代arr
中的每个元素,并arr
中的每个元素迭代dictionary_array
中的每个元素,找到具有最小Levenshtein距离的元素为O(n ^ 2)对我来说太慢了。
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
答案 1 :(得分:0)
对两个列表中每个单词的字母进行排序。然后交叉两个列表。考虑候选人靠近交叉点。然后反向排序两个列表中的字母并重复该过程。这应该会大大缩小候选人名单,所以你只需要进行大约6-12次Levenshtein比较而不是每个单词一百万次。
答案 2 :(得分:0)
我意识到你发布问题已经过了几周,而且你可能已经找到了合理的解决方案。尽管如此,在寻找类似问题的解决方案时,我不仅遇到了您的问题,还遇到了由Naoaki Okazaki开发的名为SimString的库。该库是用C ++编写的,但Okazaki描述了如何设置适当的Ruby绑定。您可能需要稍微更改一下数据结构才能最有效地使用库,但看起来它可以满足您的需求。我希望它能够解决我自己的问题。