【发布时间】:2012-12-25 19:09:53
【问题描述】:
我遇到了一个问题,它需要一个包含字符串 S 的数据结构并允许我:
- 在 O(|W|) 时间内检查单词 W 是否是 S 的子词
- 在 O(|U|) 时间内找到 S 的最长后缀,它也是给定单词 U 的前缀
- 在 O(|K|) 时间内将字符串 K 追加到 S 的末尾
我发现由 Ukkonen 算法构造的suffix trees 是我正在寻找的。算法被描述为"On-line construction of suffix trees",我对“在线”部分有一个问题:插入每个字符后,算法构造一个隐式后缀树,可以在最后一步转换为显式。但是如果我想在这一步之前使用隐式树进行搜索呢? “在线”表明在插入分析字符串的任何前缀之后是可能的,但我找不到任何在隐式树上运行的最简单算法的示例。
我的问题是:如何在 implicit 后缀树中搜索字符串?
编辑:我接受了一个很好的答案来解决我的问题,但同时我设法找到了一个更简单的解决方案 2:在长度为 S 的后缀中搜索 U 就足够了 |U|使用KMP算法,最后匹配的字符数会是字符串重叠。
【问题讨论】:
标签: algorithm suffix-tree