【发布时间】:2012-11-03 18:06:46
【问题描述】:
这是一道面试题。
给定一个由名称组成的文件,您将使用什么数据结构来验证名称是否在列表中。如果我们说一个名称与文件中的名称相差不超过一个字符,该怎么办?
【问题讨论】:
标签: search data-structures language-agnostic
这是一道面试题。
给定一个由名称组成的文件,您将使用什么数据结构来验证名称是否在列表中。如果我们说一个名称与文件中的名称相差不超过一个字符,该怎么办?
【问题讨论】:
标签: search data-structures language-agnostic
我会说这取决于上下文:如果您有数以百万计的名字、要履行的合同和为您完成的产品,那么我会说去吧,忘记自己编写它。
但是,在面试问题的背景下,我的建议是DAWG,其中包含所有可能的错误。
很久以前,我听说拼写检查器包含一个可能有错误的单词列表(而不是尝试匹配一个有效单词列表),但我不知道这是多么真实。
我曾经做过一次在单词列表中查找单词的问题(有错误),但它不仅限于一个错误,而且没有很多可用的内存。所以单词被简单地存储为一个列表(DAWG 需要节点和指针,这将需要太多开销)。
【讨论】:
我建议将文件中的名称存储到 trie 或 DAWG 中(更好的空间效率)。 名称到达后,开始遍历数据结构。您将有 4 个变体:
【讨论】:
对于第一个问题(精确搜索),您可以使用哈希表或 trie。布隆过滤器可能会提前告诉您“否”,但不会告诉您明确的“是”。
对于第二个问题(模糊搜索),需要更高级的技术。查看http://blog.srch2.com/2012/03/fuzzy-search.html 的博客,讨论此问题的不同解决方案。
【讨论】: