提供了一个有效单词列表和一个搜索单词,我想查找该搜索单词是否是一个有效单词,是否允许2个错字。
存储单词词典(假设它包含一百万个单词)和查找单词是否存在于词典中(允许2个拼写字符)的算法将是一个很好的数据结构。
如果不允许输入任何错字,则Trie是存储单词的好方法,但不确定允许输入错字时,它是否仍是存储词典的最佳方法。不确定回溯算法(在Trie中搜索允许2个错字的单词)的复杂程度。有任何想法吗?
答案 0 :(得分:0)
您可能想签出定向非循环字图或 DAWG 。它比图结构树具有更多的自动机结构。一个地方的多种可能性可以为您提供解决方案。
答案 1 :(得分:0)
如果不需要存储所有错误键入的单词,我会考虑针对此问题使用两步方法。
1。)构建一个包含所有有效单词(不包括错字)的哈希的集合。因此,我们可能在这里谈论了大约10.000个条目,这些条目仍应允许使用二进制搜索进行非常快速的查找。如果在集合中找到单词的哈希,则将其正确键入。
2。)如果在集合中未找到单词哈希,则该单词可能输入错误。因此,计算单词与所有已知单词之间的Damerau-Levenshtein距离,以弄清楚用户可能的意思。为了获得更好的性能,请在距离大于允许的2个错字阈值的情况下修改DL算法以中止计算。