Ukkonen的算法广义后缀树

时间:2013-05-21 13:09:34

标签: algorithm suffix-tree

我了解ukkonen's algorithm。我只是好奇如何扩展它以在其中包含多个字符串(以特殊字符结尾说“$”)。

我在某处读到了字符串s1(比如“abcddefx $”)和s2(比如说“abddefgh $”),我应该通过ukkonen的算法正常插入s1。然后用s2遍历树。那就是我应该在树中搜索s2。 一旦我到达搜索结束的节点(“ab”,“b”之后),我应该从那里恢复ukkonen的算法。

我理解这背后的基本逻辑。但我很好奇的是,旧的后缀链接会发生什么。它们仍然有效吗? 我也很困惑我的三重(active_node,active_length,余数)应该是(节点代表“ab”,0,0),因为我开始新的传递???

1 个答案:

答案 0 :(得分:2)

对于处理特殊字符,您可以使用Unicode Private Use Areas。这些是为您自己使用而保留的一些特殊字符范围,但范围仅为大约4000个字符。根据您使用的语言的unicode支持,这可能非常简单或困难。

如果这不起作用,而不是在树中插入字符,请将它们包含在其他类型的变量(struct,object,dictionary)中以“扩展”它们的含义。这样你就可以提供所需的额外信息(这是一个字符串的结尾?哪个字符串是这个结尾?)。然后,您可以在此新包装器上提供相等的自定义运算符,而不是直接使用字符。