【问题标题】:fastest data structure to find the superstring of a string?查找字符串超字符串的最快数据结构?
【发布时间】:2015-10-10 17:38:04
【问题描述】:

我有一个庞大的词汇表,想在词汇表中找到包含给定字符串的所有单词。这意味着我想在整个词汇表中找到给定字符串的所有超字符串。但是 Tree 数据结构对 contains() 查询很有用,并且存在一些查找子字符串的算法,但我找不到任何算法来解决这个问题。

我想在 Java 中使用这个算法(或数据结构)。

【问题讨论】:

  • 这听起来像是在自然语言处理中发现的词干问题。有现有的、优化的词干分析器。如果您想编写自己的代码,请查看开源词干分析器的源代码以获取灵感。

标签: java algorithm search data-structures


【解决方案1】:

您正在寻找suffix tree

这个想法是,给定一个字符串,这个字符串的某个后缀的每个前缀都是该字符串的一个子字符串(每个子字符串都是某个后缀的前缀)。

这意味着,您可以创建单词的后缀树,其中每个后缀的“叶子”都指向原始字符串。

现在,搜索子串,你需要按照输入子串的节点来遍历树,然后做某种树遍历(比如DFS),找到所有可达的叶子。每个这样的叶子都是某个字符串的后缀,查询字符串是它的子字符串。

这个解决方案非常便宜,它的输出大小和查询大小是线性的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2020-05-05
    • 1970-01-01
    • 2016-10-05
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多