后缀树的创建

本文通过逐步构建过程详细解释了如何用特定方法创建后缀树,以字符串abcabxabcd为例,介绍了插入字符时遵循的原则,包括开辟新结构、追加字符到终结节点、合并节点等,分析了时间复杂度,指出在最坏情况下算法的时间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成

后缀树创建的算法比较复杂,不是很好懂,个人找到了一个比较好理解的方法。下面一步一步构建一棵后缀树。以字符串 abcabxabcd 为例。

以下各图中,灰色圆表示根节点;红色表示终结,它上面的一个节点是叶子;无色表示一般节点;从根节点到叶子节点构成了当前插入的字符串的后缀。

1.基本方法

_______________________________________________________________________________

插入:a

使用的原则:

原则1:每插入一个字符,都开辟一个(根节点 -> 节点 -> 终结)的结构。

插入 a 时,开辟下面的结构:


因为之前的后缀树是空树,所以直接将上面的结构作为后缀树的初始化。

_______________________________________________________________________________

插入:b

使用的原则:

原则2:将插入的字符追加到所有终结节点的父节点的字符串值的末尾。如果父节点还有其它分支,则在终结节点与父节点之间再创建一个节点,并把字符串设为该字符(如图左边一条分支的节点,原来值为 a ,现在为 ab)

原则1:每插入一个字符,都开辟一个(根节点 -> 节点 -> 终结)的结构。(如图右边一条分支)




这里,引入一个概念,如果终结节点的父节点没有其它分支,则这个父节点是一个叶子节点。如此时,ab, b 都是叶子节点


_______________________________________________________________________________

插入:c

使用的原则:

原则2:不再缀述;

原则1:不再缀述;


_______________________________________________________________________________

插入:a

使用的原则:

原则2:不再缀述;

原则1:不再缀述;

原则3:每次插入一个字符时,都检查新生成的(根节点 -> 节点 -> 终结)结构(如果有的话),在根节点的直接子节点中找到字符串值以该字符开始的那个节点(如果有的话,只可能有一个),将它们合并。左图展示了新增的 a 节点与根节点的子节点 abca 可以合并,合并成为右图,右图即为插入到该字符时的后缀树。



_______________________________________________________________________________

插入:b

使用的原则:

原则2:不再缀述;左边的 a 节点与终结节点之间会产生一个节点,字符串值为 b。

原则1:不再缀述;

原则3:不再缀述;

原则

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值