gpt4 book ai didi

algorithm - 从后缀树生成后缀

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:32 25 4
gpt4 key购买 nike

我已经基于此处的站点用 Java 构建了一个后缀树 http://marknelson.us/1996/08/01/suffix-trees/但我遇到了一个问题。我可以很好地构建后缀树,但我可以尝试从树中构建一组所有后缀。我基本上找到所有“结束节点”并返回由该“结束节点”表示的字符串

该算法适用于像“bookkeeper”这样的词

├── (1) bookkeeper
├── (9) e
│ ├── (8) eper
│ ├── (10) per
│ └── (12) r
├── (6) k
│ ├── (7) eeper
│ └── (5) keeper
├── (3) o
│ ├── (4) kkeeper
│ └── (2) okkeeper
├── (11) per
└── (13) r

后缀:

[bookkeeper, ookkeeper, okkeeper, kkeeper, keeper, eeper, eper, er, per, r]

但是当我使用“ATATATATATA”之类的东西时它失败了

├── (1) ATATATATATA
└── (2) TATATATATA

后缀:

[ATATATATATA, TATATATATA]

但是正确的后缀应该是:

[A, ATA, ATATA, ATATATA, ATATATATA, ATATATATATA, TA, TATA, TATATA, TATATATA, TATATATATA]

我可以通过查找每个“结束节点”字符串的所有后缀来找到答案,但这似乎不是正确的方法。还有其他建议吗?

编辑:谢谢 izomorphius!在原始字符串中添加一个 END_CHAR 帮助了很多。

├── (21) #
├── (19) A
│ ├── (20) #
│ └── (15) TA
│ ├── (16) #
│ └── (11) TA
│ ├── (12) #
│ └── (7) TA
│ ├── (8) #
│ └── (3) TA
│ ├── (4) #
│ └── (1) TA#
└── (17) TA
├── (18) #
└── (13) TA
├── (14) #
└── (9) TA
├── (10) #
└── (5) TA
├── (6) #
└── (2) TA#

后缀:

[A, ATA, ATATA, ATATATA, ATATATATA, ATATATATATA, TA, TATA, TATATA, TATATATA, TATATATATA]

最佳答案

关于如何构建后缀树的典型技巧是添加一个你知道不在字母表中的人工字符。我通常添加'#',然后为ATATATATATA#构建后缀树,这样你就不会再有这个问题了。

您会遇到您所描述的问题,因为缺少的后缀实际上是作为另一个后缀的前缀来满足的。在末尾添加一个人工字符可确保这种情况永远不会发生。

关于algorithm - 从后缀树生成后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com