[复习] AC自动机
[复习] AC自动机
自动机
从一个状态通过接收一个信号转移到另一个状态。
其实就是从一个点走一种颜色的边到达另一个点,你会有一个初始点,然后每次走当前要走的颜色的边,会走到一个目标点,目标点保存着需要的答案。
AC自动机
以
用于解决多模式串匹配等任务。
例题:
给你一个文本串
我们不能做
考虑把每个模式串插入
每个节点是一个前缀,对于每个节点
计
-
对于
没有的边 ,我们给它重新连向 。 -
而如果有这条出边,那么得到
的 为 。
我们在
for(int i=0;i<26;i++){ if(trans[0][i])q.push(trans[0][i]); } while(!q.empty()){ int u=q.front();q.pop(); for(int i=0;i<26;i++){ if(trans[u][i]){ fail[trans[u][i]]=trans[fail[u]][i]; q.push(trans[u][i]); } else trans[u][i]=trans[fail[u]][i]; } }
这里有个细节就是,第一个字符的
我们把
我们从一个点一直跳
我们不用每次跳
注意到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】