[Notes] 后缀自动机学习笔记

后缀自动机学习指南
本文介绍了后缀自动机的基本概念、学习资源及应用案例。包括后缀自动机的两个核心特性:根据拓扑序进行DP操作和形成一棵parent树。此外还探讨了广义后缀自动机的构建方法及其在解决子串问题中的应用。

作为蒟蒻很羞耻的不会后缀自动机 于是去学 然后会发现blog已经被后缀自动机刷屏了 我学的SAM姿势有点奇怪

学习资料
最初是在这里学的 SUFFIX AUTOMATON by- saisumit
业内公认的是这个 MAXimal :: algo :: Суффиксный автомат. Построение и применения
有关后缀树看fhq 后缀自动机与线性构造后缀树
题目照着这个刷的 后缀自动机总结
广义后缀自动机 广义后缀自动机与后缀树 用SAM建广义后缀树

后缀自动机有两个本质
一是一个自动机 从起始状态出发的任意路径是一段子串 可以根据拓扑序做一系列DP 最常见的就是统计right集合的大小
一是一棵parent树 正式论文里称后缀链接形成的一棵树 其实就是反串的一颗后缀树 所以也有人说后缀自动机就是后缀树 树上也可以维护一堆值

后缀自动机的时空复杂度都是 O(n) 的 这个CLJ的讲稿里证明的很清楚了 证明的关键在于两个点的right集合 要么不相交 要么包含 形成一棵树结构
这个从代码里也不难看出 代码简短犀利 就算硬背也不算难

后缀自动机每个状态只要存储link len next[K] 分别表示 后缀链接 最大长度 自动机上的儿子 每个状态代表以right集合每个元素为结尾的长度为len[fa[x]]~len[x]的子串

后缀自动机的应用有很多

  1. Number of different substrings of a given string .
  2. Total length of various substrings.
  3. Lexographically kth substring.
  4. smallest Cyclic shift.
  5. No. of occurrences of a pattern in the given Text.
  6. Position of all Occurrences.
  7. Longest common substring.
  8. Longest Common substring of multiple substring.
  9. Search for shortest substring that is not included in this string.

来自 SUFFIX AUTOMATON by- saisumit
其实就是一系列关于 子串 是否出现 出现次数 的问题

广义后缀自动机就是可以识别多个串的后缀的自动机 或者说 识别一颗trie树的自动机 建法和单串后缀自动机基本一样 网上模板有很多
具体一系列证明lyy的论文很详细 没有仔细看
很经典的应用的CLJ的ZJOI题 诸神眷顾的幻想乡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值