【问题标题】:What would be a good data structure to store a dictionary(of words) to optimize the search time?存储字典(单词)以优化搜索时间的良好数据结构是什么?
【发布时间】:2019-06-24 11:25:39
【问题描述】:

提供了一个有效词的列表和一个搜索词,我想查找搜索词是否是一个有效的词 ALLOWING 2 个错字字符。

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

如果不允许出现拼写错误,那么 Trie 将是存储单词的好方法,但不确定在允许拼写错误时它是否仍然是存储字典的最佳方式。不确定回溯算法(在 Trie 中搜索允许 2 个拼写错误的单词)的复杂性是多少。有什么想法吗?

【问题讨论】:

标签: algorithm search fuzzy-search


【解决方案1】:

您可能需要查看 Directed Acyclic Word Graph 或 DAWG。它具有比图结构树更多的自动机结构。来自一处的多种可能性可为您提供解决方案。

【讨论】:

    【解决方案2】:

    如果不需要同时存储所有输入错误的单词,我会考虑使用两步法来解决这个问题。

    1. 构建一个包含所有有效单词(不包括 错别字)。所以可能我们在这里谈论大约 10.000 个条目, 它仍然应该允许使用二进制搜索进行相当快速的查找。如果 在输入正确的集合中找到一个单词的哈希值。

    2. 如果在集合中找不到单词哈希,则该单词可能是 打错了。所以计算之间的 Damerau-Levenshtein 距离 这个词和所有已知的词来弄清楚用户可能有什么 的意思。为了在此处获得一些性能,请将 DL 算法修改为 如果距离大于允许的距离,则中止计算 2 个错别字的阈值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多