SAM(后缀自动机)速通
1|0约定
记
2|0定义 & 定理
SAM 是一个接受
定义
我们将所有
引理 1: 若字符串
的两个子串 的 相同,当且仅当 为 的后缀;
引理 2: 对于字符串
的两个子串 ,满足
引理 3: 一个状态的字符串的长度恰好唯一覆盖
,且长度短的字符串为长度长的字符串的后缀。
显然,SAM 由
我们令后缀链接
引理 4: 所有的后缀链接构成一颗以
为根的树(即为后缀树)。
引理 5: 对于
以外的状态 ,有 。
引理 6: 任意状态
顺着 遍历,总会到达 。路径中我们可以得到互不相交的区间序列 ,且并集为 。
3|0算法
该算法为在线算法,且为保证空间复杂度,我们只保存
初始 SAM 只包含一个状态
3|1流程
- 令
为添加字符 前,整个字符串对应的状态(初始 )。 - 创建新状态
,令 。 - 从状态
开始,不停向后缀链接遍历直至其存在到字符 的转移或已到达虚拟结点 ,记该状态为 。将遍历中的状态(除了 )向 添加转移。 - 若
,令 并退出。 - 令
通过 转移得到的状态为 ,分两种情况讨论:- 若
,令 并退出; - 否则,我们创建新状态
,并令其复制 的状态,再令 。最终我们通过后缀链接将 往回走,只要存在 ,就将转移重定向至 。
- 若
- 以上三种情况,在退出后令
。
3|2证明
正确性证明
这是速通,有什么证明。
复杂度证明
复杂度线性,不予证明。
状态数证明
对于一个长度为
转移数证明
对于一个长度为
__EOF__

本文作者:TrueFalse
本文链接:https://www.cnblogs.com/cqbzljh/p/18699459.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzljh/p/18699459.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现