500,000个街道名称 - 用于实现快速搜索的数据结构和用途?

时间:2012-08-28 00:22:07

标签: java algorithm search data-structures autocomplete

所以我们有很多街道名称。他们进来一个文件。在生产中启动服务器时,Id可能会缓存它们。搜索应该是自动完成的,例如 - 例如你键入'lang',你可能会得到8次点击:langstr,langestr。等

2 个答案:

答案 0 :(得分:10)

您正在寻找的是某种压缩的trie表示。您可能希望将succinct triesDAWG作为起点,因为它们可以提供出色的效率和非常好的空间使用。

希望这有帮助!

答案 1 :(得分:0)

自动填充通常使用以下方法之一实现:

  • 即可。通过索引树结构中的可搜索文本(前缀树,后缀树,dawg等),可以以内存存储为代价执行非常快速的搜索。树遍历可以进行近似匹配。
  • 模式分区。通过将文本划分为标记(ngrams),可以使用简单的散列方案执行模式发生的搜索。
  • 过滤即可。找到一组潜在的匹配,然后应用顺序算法检查每个候选人。

查看completely,这是一个Java自动完成库,它实现了后面的一些概念。