Search in implicit suffix tree constructed by Ukkonen algorithm
我遇到了一个问题,需要一个数据结构来保存字符串并允许我:
我发现Ukkonen算法构造的后缀树就是我要搜索的。算法被描述为"后缀树的在线构造",我对"在线"部分有一个问题:在插入每个字符后,算法构造一个隐式后缀树,在最后一步可以转换为显式后缀树。但是如果我想在这一步之前使用隐式树进行搜索呢?"在线"表明在插入分析字符串的任何前缀之后都是可能的,但是我找不到任何在隐式树上操作的最简单算法的例子。
我的问题是:如何在隐式后缀树中搜索字符串?
编辑:我接受了一个很好的答案来解决我的问题,但同时我设法找到了一个更简单的解决方案2:使用kmp算法在长度为s的后缀中搜索u就足够了,最后匹配的字符数将是字符串重叠。
隐式后缀树和显式后缀树只有一个区别:它不包含字符串结尾标记(并且不包含与这些字符串结尾标记对应的任何分支)。
这意味着在隐式后缀树或显式后缀树中搜索子字符串没有区别。由于隐式后缀树包含较少的不必要分支,这就保证了子字符串搜索的效率更高(但仍然是线性时间)。
所以需求1会自动满足:只需从根目录中搜索后缀树并选择与给定单词匹配的分支。
至于需求2,我认为您不能用相同的隐式后缀树来满足它。因为您需要字符串结尾标记来处理后缀。
但您可以在