串串总结。
KMP
AC 自动机 ACAM
exKMP Z 函数
manacher
后缀自动机 SAM
结论与思考
- 一个节点 到根节点的链上所有节点 endpos 的并集是以 为结尾的所有字符串(以 为结尾的后缀)。
- 节点 的 endpos 里所有后缀的出现次数相等,且儿子的 endpos 里的字符串长度一定大于父亲的长度。
- 节点 里所有节点各自的出现次数为 。 可以通过树形 dp 后求出,也就是该节点的 endpos 大小。
- SAM 上匹配到一个节点后,可以不断删除要匹配的字符串的开头,当长度小于等于父亲的 时移动到父节点即可。因为节点 存的是以 为结尾的后缀。
- 一个等价类,即一个节点 中字符串的个数为 。
- SAM 上从根节点到任意节点的路径是原串的一个子串,原串的一个子串也一定能用某条从根节点出发的路径表示。
- SAM 最多只有 个节点, 条边。
- SAM 的转移边构成一个 DAG。
- 父节点的 endpos 集合一定包含了子节点的 endpos 集合。注意 endpos 集合存的是出现位置的末尾。
- SAM 上每个节点代表的不止一个字符串,只有知道了是从根到该节点的哪条路径走来的,才能确定现在的字符串。
- endpos 集合间要么包含,要么无交。因此可以构成树形结构。endpos 集合越大,其中包含的字符串的长度越小。
- SAM 里转移边的含义是在后面加入字符 后,新的字符串的 endpos 集合属于哪个节点。
- SAM 里后缀链接树边的含义是最长的和自己的 endpos 不同的后缀所在的节点。
- 两个节点在 SAM 后缀链接树中的 LCA 是它们的最长公共后缀。
- 一个节点的 endpos 大小表示从根节点到该节点一共有多少条路径。
- 原串的一个子串所在的节点可以先在建 SAM 时预处理每一个字符作为结尾时的所在节点,然后倍增跳后缀链接树,找到第一个 大于等于子串长度的节点即可。
- 某节点的 endpos 集合可以用线段树合并或启发式合并维护。
实现
- SAM 具体树形 dp 可以用桶排序代替,实现更小的常数。
后缀数组 SA
回文自动机 PAM
posted @
2025-01-15 23:38
KS_Fszha
阅读(
5)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战