1

当在字符串 ' AEKEAAEKEAAEKEA$' 上运行算法以寻找至少出现 3 次的最长子字符串时,后缀树中的所有节点最多有 2 个分支,这怎么可能?

正确的结果应该是子字符串 ' AEKEA'。

您可以在 在线后缀树生成器中轻松查看树

我只是按照维基百科的描述:

“找到至少出现k次的最长子串的问题,可以通过首先对树进行预处理来计算每个内部节点的叶子后代的数量,然后找到至少有k个后代的最深节点”

我在这里想念什么?

谢谢你。

4

1 回答 1

3

我不认为那个网站是正确的。当我通过后缀树运行 'AEKEAEKEAAEKEA' 时,我得到以下树。

└── (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$
于 2012-06-08T13:05:31.867 回答