首页 文章

Ukkonen的算法广义后缀树

提问于
浏览
0

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

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

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

1 回答

  • 2

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

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

相关问题