找到最佳匹配前缀最快的数据结构是什么?

时间:2018-11-19 09:20:41

标签: data-structures binary-search-tree prefix prefix-tree

上下文:我正在使用一个用于用户代理字符串(Yauaa)的分析器,作为此分析的一部分,我想做出一个有根据的猜测,应报告该设备的品牌。我有一个实现需要重写,以提高效率。

因为我不想拥有要基于模型前缀进行检测的所有设备的完整列表。

所以我有一个带有前缀和相关品牌的数据集:

  • “ GT-”->“三星”
  • “ LLD-”->“华为”

然后我想做一个.get(“ GT-1234124”),它应该导致“三星”,因为那是“最长匹配前缀”。

我看了看Trie的结构,但这似乎是相反的情况。我了解的是,您从一组值开始,并且可以有效地获取以提供的前缀开头的所有值。

如果我要从头开始实现这一点,我会使用一棵类似于Trie的树,但是绕过它的方式有所不同。我正在寻找的是一种数据结构,它可以尽快完成我所需要的。

对于此用例,您建议使用哪种数据结构?

我可以使用现有的(经过验证的)实现吗?

1 个答案:

答案 0 :(得分:0)

我对数据结构进行了一些研究,发现本质上是我需要Trie结构,并采用了不同的方式遍历该结构。

由于此结构非常简单,因此我创建了自己的实现非常好的实现。

请参阅: https://github.com/nielsbasjes/yauaa/blob/master/analyzer/src/main/java/nl/basjes/parse/useragent/utils/PrefixLookup.java


更新:

  1. 我写了一篇有关https://techlab.bol.com/finding-the-longest-matching-string-prefix-fast/
  2. 的文章
  3. 我将实现放入一个单独的库中,该库已开源,并且可以通过maven Central获得。参见https://github.com/nielsbasjes/prefixmap