算法学习:后缀自动机转后缀树转后缀数组

算法学习:后缀自动机转后缀树转后缀数组

引入

其实这是一篇水文
想要学后缀自动机的话去查2012年noi冬令营陈立杰讲稿
顺便说一句,讲稿上有一些错误,多翻几篇博客加深理解。
今天这里主要要讲的是后缀自动机如何转后缀树和后缀数组

后缀树

这里首先需要提一下后缀树的概念
后缀树其实相当于把所有的后缀插入一颗Trie树
然而时空复杂度都是O(N^2)的
所以我们可以把这可Trie树上的某些边压缩一下
比如这样

这是一颗字符串banans的所有后缀组成的Trie树

这是一颗压缩后的Trie树,也就是后缀树
(图片来源于网络)

从后缀自动机到后缀树

其实操作非常简单,就是把字符串倒序插入后缀自动机,形成的parent树就是后缀树
证明的话,考虑一对parent树上的父子关系。
AAAAxAAAAxBAAx
考虑这样一个字符串
考虑串AAAAx和AAx
显然AAx是AAAAx parent树上的父亲
我们发现,AAx是AAAAx的后缀
我们考虑parent树上从叶子节点到根的路径。
每个节点表示的字符串长度集合[Min(s),Max(s)]越来越小,而且我们还会发现,父亲一定是儿子的后缀。并且儿子的Right集合是父亲的真子集。也就是父亲可能作为别的儿子的后缀
这个时候我们对比后缀树。
仍然是考虑一条从叶子节点到根的路径,我们会发现父亲一定是儿子的前缀。并且一个父亲可能作为很多个儿子的前缀,比如上面例子中的AAx可以作为AAAx&#x

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值