我了解ukkonen's algorithm。我只是好奇如何扩展它以在其中包含多个字符串(以特殊字符结尾说“$”)。
我在某处读到了字符串s1(比如“abcddefx $”)和s2(比如说“abddefgh $”),我应该通过ukkonen的算法正常插入s1。然后用s2遍历树。那就是我应该在树中搜索s2。 一旦我到达搜索结束的节点(“ab”,“b”之后),我应该从那里恢复ukkonen的算法。
我理解这背后的基本逻辑。但我很好奇的是,旧的后缀链接会发生什么。它们仍然有效吗? 我也很困惑我的三重(active_node,active_length,余数)应该是(节点代表“ab”,0,0),因为我开始新的传递???
答案 0 :(得分:2)
对于处理特殊字符,您可以使用Unicode Private Use Areas。这些是为您自己使用而保留的一些特殊字符范围,但范围仅为大约4000个字符。根据您使用的语言的unicode支持,这可能非常简单或困难。
如果这不起作用,而不是在树中插入字符,请将它们包含在其他类型的变量(struct,object,dictionary)中以“扩展”它们的含义。这样你就可以提供所需的额外信息(这是一个字符串的结尾?哪个字符串是这个结尾?)。然后,您可以在此新包装器上提供相等的自定义运算符,而不是直接使用字符。