后缀树和最长重复子串问题

时间:2012-06-08 12:28:10

标签: algorithm suffix-tree

在字符串“AEKEAAEKEAAEKEA$”上运行算法时,查找最少有3个子字符串的子字符串,后缀树中的所有节点都有最多2个分支,这怎么可能?

正确的结果应该是子串“AEKEA”。

您可以在online suffix tree builder

中轻松查看树状结构

我只是遵循维基百科的描述:

  

“找到至少k的最长子串的问题   可以通过首先预处理树来计算事件来找到事件   每个内部节点的叶子后代数,然后查找   最深的节点,至少有k个后代“

我在这里缺少什么?

谢谢。

1 个答案:

答案 0 :(得分:3)

我不认为该网站是正确的。当我通过我的suffix tree运行'AEKEAAEKEAAEKEA'时,我得到以下树。

└── (0)
    ├── (27) $
    ├── (6) A
    │   ├── (26) $
    │   ├── (16) AEKEA
    │   │   ├── (17) $
    │   │   └── (7) AEKEA$
    │   └── (18) EKEA
    │       ├── (19) $
    │       └── (8) AEKEA
    │           ├── (9) $
    │           └── (1) AEKEA$
    ├── (4) E
    │   ├── (24) A
    │   │   ├── (25) $
    │   │   └── (14) AEKEA
    │   │       ├── (15) $
    │   │       └── (5) AEKEA$
    │   └── (20) KEA
    │       ├── (21) $
    │       └── (10) AEKEA
    │           ├── (11) $
    │           └── (2) AEKEA$
    └── (22) KEA
        ├── (23) $
        └── (12) AEKEA
            ├── (13) $
            └── (3) AEKEA$

从这个分支中可以看出,你找到了最长的子串,发生了3次。

└── (0)
    ├── (27) $
    ├── (6) A
    │   ├── (26) $
    │   ├── (16) AEKEA
    │   │   ├── (17) $
    │   │   └── (7) AEKEA$
    │   └── (18) EKEA
    │       ├── (19) $
    │       └── (8) AEKEA
    │           ├── (9) $
    │           └── (1) AEKEA$