Ukkonen的算法广义后缀树

Ukkonen's Algorithm Generalized Suffix Trees

我理解Ukkonen的算法。我只是好奇如何将其扩展为包含多个字符串(以一个特殊字符结尾,比如"$")。

我在某个地方读到了给定字符串s1(比如abcdefx$)和s2(比如abddefgh$)的内容,我应该通过ukkonen的algo正常插入s1。然后用s2穿过树。也就是说,我应该在树中搜索s2。一旦我到达搜索结束的节点("a b",在"b"之后),我应该从那里恢复ukkonen的算法。

我理解这背后的基本逻辑。但我好奇的是,旧的后缀链接会发生什么。它们仍然有效吗????另外,我对我的三重(活动节点、活动长度、余数)感到困惑。当我开始新的过程时,它应该是(代表"ab",0,0的节点)吗????


为了处理特殊字符,可以使用Unicode专用区域。这些是为您自己使用而保留的一些特殊字符范围,但是这些范围的大小仅为4000个字符左右。根据您使用的语言的Unicode支持,这可能非常简单或困难。

如果这不起作用,那么不要在树中插入字符,而是将它们包装在其他类型的变量(结构、对象、字典)中以"扩展"它们的含义。这样就可以提供所需的额外信息(这是字符串的结尾吗?这是哪个字符串的结尾?)。然后,您可以在此新包装上提供自定义的相等运算符,而不是直接使用字符。