后缀自动机SAM

ps:陈立杰(Orz%%%)的课件大家可以去看一下,很有帮助,我加了一些自己的理解并解释的更清楚一些(然而好像并没有特别清楚QAQ)
再ps:水平极其有限,有些地方并没有深究,如果有错误或者需要增进的地方,欢迎指出!

作用

后缀自动机(Suffix Automaton,简称SAM)能够识别一个字符串的所有后缀(但是在之后我们会发现实际上能够识别所有字串),可以干很多后缀数组以及后缀树能干的事情。而且后缀自动机的构造复杂度是线性的,代码也非常简短。

自动机

先简要说说自动机是什么(学AC自动机的时候我竟然并不知道自动机是个什么东西:P)。自动机可以识别字符串S等价于从初始状态沿着S走能够走到结束状态,自动机可以从某状态s开始识别字符串S等价于从s沿着S走能够走到结束状态。

性质

ps:写的又渣又长,背板者如果想可以直接看模板
实际上能够识别一个字符串所有后缀的自动机有很多很多,比如这个(略去结束状态):
这里写图片描述
这货实际上就是后缀全部插入,节点数是 O(n2) 的,太多了啊,所以我们需要求出的后缀自动机实际上是最简状态后缀自动机(状态数最少的后缀自动机),而不是其他不是最简的后缀自动机。

我们用ST(S)表示从初始状态沿着S走到达的状态。如果S的一个字串A出现在了S的[l,r),那么ST(A)就可以识别S从r开始的后缀(记为Suffix(r)),所以假设A在S中出现的位置为 [l1,r1),[l2,r2),,[ln,rn) ,则ST(A)就能够识别Suffix( r1 ),Suffix( r2 ),…,Suffix( rn )。我们把{ r1,r2,,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值