【问题标题】:What is a generalized suffix tree?什么是广义后缀树?
【发布时间】:2014-01-19 05:47:15
【问题描述】:

我看到了维基百科页面,但仍然不清楚这个想法。

要找到 2 个字符串(TS)的最长公共子字符串,我读过我们必须为字符串 T($1)S($2) 构建一个后缀树,其中`($1) 和 ($2) 是不属于字符串的特殊字符。

但是字符串ABABBABA 的维基百科图像看起来像这样:

为什么它不包含整个字符串 ABAB($1)BABA($2) ?不是串接字符串的后缀吗?

叶子上的数字是什么?

【问题讨论】:

    标签: string data-structures substring suffix-tree string-algorithm


    【解决方案1】:

    广义后缀树是后缀树的变体,其中存储了两个(或更多)不同字符串 T1 和 T2 的后缀,而不仅仅是一个字符串T的后缀。

    构建通用后缀树的一种方法是首先为 T1$1T2$2。这个生成的后缀树将包含 T1 和 T2 的所有后缀,但它也会包含许多以 T1 开头的“虚假”后缀 并传播到 T2。为了解决这个问题,在构建初始后缀树之后,您通常会在树结构上进行第二次遍历,并消除任何超出 $1 标记的后缀。这就是为什么,例如,您在上面给出的广义后缀树不包含 ABAB$1BABA$2

    至于您的下一个问题 - 叶子中的数字是多少? - 后缀树中的每个叶子通常都用叶子对应的后缀的起始索引进行标记。在广义的后缀树中,每个叶子都被标记了两条信息——后缀的起始索引,以及后缀属于哪个字符串。叶子上的符号 a:b 表示“这个后缀来自字符串 a,它从该字符串中的索引 b 开始。”例如,最左边叶子上的标记 1:3 表示“这个后缀来自字符串 1,它从位置 3 开始”。您可以看到这对应于后缀 A$1,它确实从 ABAB$1 中的位置 3 开始,假设为 1-indexing。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-04-28
      • 2015-04-01
      • 2010-11-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多