集训总结8

后缀数组和后缀自动机

后缀数组

后缀数组就是把一个字符串的后缀用一个数组储存下来,简单来说,我们要把字符串的每个后缀按照字典序排序,维护以下几个数组:

  • sa[i]:排名为i的后缀的起始位置的下标
  • rk[i]:起始下标为i的后缀的排名
  • height[I]:排名第I个和排名第i-1个的后缀的最长的公共前缀

具体构造可以用基数排序,时间复杂度是O(nlogn)。

一个比较重要的性质:排名第i个和排名第j(j>=i)个的后缀的LCP为min{height[i]…height[j]},具体操作可以用st表O(nlogn)预处理,O(1)查询。

后缀自动机

后缀自动机的比较高大上的定义是一个能接受字符串s的所有后缀的最小化确定有限状态的自动机。

具体来说,后缀自动机是一个DAG,顶点为状态,边为状态的转移。其中有一个初始状态,由它可以到达其余所有状态。

后缀链接是后缀自动机的核心(个人认为),后缀链接指向了当前后缀在不同等价类(endpos集合)中的最长的后缀,一个重要的性质是后缀链接构成了一颗以初始状态为根的树,有了这个性质,很多问题就可以上树,也就可解了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值