存储字典(单词)以优化搜索时间的良好数据结构是什么?

时间:2019-01-31 04:13:24

标签: algorithm search fuzzy-search

提供了一个有效单词列表和一个搜索单词,我想查找该搜索单词是否是一个有效单词,是否允许2个错字。

存储单词词典(假设它包含一百万个单词)和查找单词是否存在于词典中(允许2个拼写字符)的算法将是一个很好的数据结构。

如果不允许输入任何错字,则Trie是存储单词的好方法,但不确定允许输入错字时,它是否仍是存储词典的最佳方法。不确定回溯算法(在Trie中搜索允许2个错字的单词)的复杂程度。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

您可能想签出定向非循环字图或 DAWG 。它比图结构树具有更多的自动机结构。一个地方的多种可能性可以为您提供解决方案。

答案 1 :(得分:0)

如果不需要存储所有错误键入的单词,我会考虑针对此问题使用两步方法。

1。)构建一个包含所有有效单词(不包括错字)的哈希的集合。因此,我们可能在这里谈论了大约10.000个条目,这些条目仍应允许使用二进制搜索进行非常快速的查找。如果在集合中找到单词的哈希,则将其正确键入。

2。)如果在集合中未找到单词哈希,则该单词可能输入错误。因此,计算单词与所有已知单词之间的Damerau-Levenshtein距离,以弄清楚用户可能的意思。为了获得更好的性能,请在距离大于允许的2个错字阈值的情况下修改DL算法以中止计算。