后缀自动机小记

本文介绍了后缀自动机(SAM)的概念、构建过程及其性质。SAM通过在线拓展方法构建,用于识别字符串的所有子串,避免了Trie树的状态冗余。文章还探讨了SAM的运行机制,并提供了相关例题展示其在字符串处理问题中的应用。
摘要由CSDN通过智能技术生成

感觉高一学的SAM太假了,重学一遍。。。

后缀自动机(SAM)的由来

我们需要一种可以识别串S的所有字串的自动机,我们显然可以把S的所有后缀建成Trie树,那么树上每一个点都代表S的一个子串。但这样状态数是 n2 n 2 级别的,考虑到Trie树上有很多重复部分,所以有了SAM这个东西。

首先定义几个东西

transS,c t r a n s S , c 表示状态 S S 加上字符 c 所到达的状态。
faS f a S 表示状态 S S 在parent树上的父亲。
R i g h t S 表示状态 S S 的右端点集合。
M a x S 表示状态 S S 的最左能延伸的长度。

SAM的构建

SAM采用的是在线拓展方法,也就是我们要得到串 T c 的SAM,我们可以在串 T T 的SAM加上字符 c 带来的修改。
T T 的长度为 L
具体的步骤如下
1. 从上次拓展的到的点 last l a s t (也就是 Right={ L} R i g h t = { L } 的点)开始,新建节点 np n p t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值