-
AC自动机
AC自动机
0x00 简介
- 自动AC机(划去
- AC自动机和SAM一样是一种有限状态自动机
- 能够接受一堆字符串的前缀
- 相当于是许多串上的KMP
- 可以处理多串匹配的问题
- 复杂度是线性的(乘上字符集大小)
- 由于多串转移的特殊性可以做一些DP问题
0x01 实现
- 简而言之,就是在一个trie上的KMP
- 维护一个fail指针,相当于KMP中的next数组
- 先对一些串建trie,然后对trie进行BFS
- 假设我们正在处理p这个节点
- 遍历p的所有可能的转移c[w],如果某种转移合法
- 我们考虑fail指针构成的链,从p开始的链上如果有一个点q有c[w]这个转移,那么c[w]->fail=q->c[w]
- 正确性很显然
- 也很好写
- 在建fail指针过程中可以对转移进行压缩,把一条fail链压缩成一条边,注意要特判NULL的情况,具体实现看代码
0x02 dp
- 可以做一些什么不出现一些串的长度为l的串里有多少个啊什么的问题
- 由于压缩后的AC自动机构成的转移是一张图,甚至还可以做邻接矩阵的乘法,搞矩乘加速
许愿弥生改二
-
相关阅读:
分形之城
【SDOI2011 第2轮 DAY1】消防 树上问题+二分+贪心
【Usaco Nov08 Gold】玩具 三分+贪心
分治 复习
快读板子
最小线段覆盖 C神奇项链
比赛经验积累1
字符串 专题
界面小项目之W3C
前端小基础
-
原文地址:https://www.cnblogs.com/LoveYayoi/p/6745487.html
Copyright © 2020-2023
润新知