【问题标题】:500,000 street names - what data structure and to use to implement a fast search?500,000 个街道名称 - 使用什么数据结构来实现快速搜索?
【发布时间】:2012-08-22 11:45:46
【问题描述】:

所以我们有很多街道名称。它们以文件的形式出现。在生产中启动服务器时,我可能会缓存它们。搜索应该是自动完成的 - 例如你输入“lang”,你可能会得到 8 次点击:langstr、langestr。等等

【问题讨论】:

标签: java algorithm search data-structures autocomplete


【解决方案1】:

您正在寻找的是某种压缩的 trie 表示。您可能希望以 succinct triesDAWGs 为起点,因为它们具有出色的效率和非常好的空间利用率。

希望这会有所帮助!

【讨论】:

  • @tq- 我对 mongodb 不熟悉,所以我无法对此发表评论。对不起!
【解决方案2】:

自动完成通常使用以下方法之一实现:

  • 树木。通过在树结构(前缀树、后缀树、dawg 等)中对可搜索文本进行索引,可以执行非常快速的搜索,但会占用内存存储空间。树遍历可以适应近似匹配。
  • 模式分区。通过将文本划分为标记 (ngram),您可以使用简单的散列方案执行模式出现的搜索。
  • 过滤。找到一组潜在匹配项,然后应用顺序算法检查每个候选对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    相关资源
    最近更新 更多