当前位置: 首页 > news >正文

AC自动机

什么是AC自动机?
AC自动机是一种经典的多模式串匹配算法,它能够在文本中同时查找多个模式串的出现位置,时间复杂度为O(n + m + z),其中n是文本长度,m是所有模式串总长度,z是匹配到的模式串数量。
为什么需要AC自动机?
假设要在一篇文章中查找1000个词,如果用传统的KMP算法,需要对每个敏感词单独扫描文章,时间复杂度为O(1000 × n)。AC自动机只需要扫描文章一次就能找到所有敏感词!
AC自动机的核心思想
AC自动机 = Trie树 + KMP思想 + 失配指针
1.构建Trie树
首先将所有模式串构建成一棵Trie树,每个节点代表一个字符,从根节点到某个节点的路径构成一个模式串的前缀。
2.构建失配指针(Fail指针)
这是AC自动机的核心!Fail指针指向当前节点匹配失败时应该跳转的位置。
根节点的所有子节点的fail指向根节点
对于其他节点u,假设其父节点为p,通过字符c到达u
如果p->fail有通过c的子节点,则u->fail指向该子节点
3.匹配过程
匹配时,AC自动机在文本串上移动,使用Trie树进行匹配,匹配失败时通过fail指针跳转。
ac acwing1282代码

include<bits/stdc++.h>

using namespace std;
const int N=1e4+10,S=55,M=1e6+10;
int tr[NS][26],cnt[NS],ne[NS],idx,n;
int que[N
S];
char str[M];
void insert(){
int p=0;
for(int i=0;str[i];i++){
int u=str[i]-'a';
if(!tr[p][u]) tr[p][u]=++idx;
p=tr[p][u];
}
cnt[p]++;
}
void build(){
int hh=0,tt=-1;
for(int i=0;i<26;i++){
if(tr[0][i]) que[++tt]=tr[0][i];
}
while(hh<=tt){
int ans=que[hh++];
for(int i=0;i<26;i++){
if(tr[ans][i]){
ne[tr[ans][i]]=tr[ne[ans]][i];
que[++tt]=tr[ans][i];
}
else{
tr[ans][i]=tr[ne[ans]][i];
}
}
}
}
int main(){

int t;
cin>>t;
while(t--){memset(cnt,0,sizeof cnt);memset(tr,0,sizeof tr);memset(ne,0,sizeof ne);idx=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",str);insert();}build();scanf("%s",str);int res=0;for(int i=0,j=0;str[i];i++){int u=str[i]-'a';j=tr[j][u];int p=j;while(p&&cnt[p]!=-1){res+=cnt[p];cnt[p]=-1;p=ne[p];}   }printf("%d\n",res);
}
return 0;

}

http://www.jsqmd.com/news/149277/

相关文章:

  • 谈谈最近学习的低延迟直播架构的一些收获
  • 为什么企业都在用TensorFlow镜像跑大模型Token任务?
  • 【Open-AutoGLM开源模型深度对比】:谁才是2024年最强AI引擎?
  • Open-AutoGLM推理加速秘诀:4步实现毫秒级响应(工业级部署方案)
  • 2025年目前评价高的方形横流冷却塔定做厂家哪家靠谱,方形逆流冷却塔/圆形逆流冷却塔/冷却塔/工业冷却塔方形横流冷却塔源头厂家电话 - 品牌推荐师
  • 从新手到专家:Mac平台Open-AutoGLM安装疑难杂症一站式解决方案
  • 揭秘Open-AutoGLM与Ollama集成奥秘:如何实现高效本地化AI部署
  • 高质量数据集:从“模型驱动“到“数据驱动“的大模型进阶之路
  • 2025年贷款诈骗律师排名,贷款诈骗律师哪个值得推荐 - 工业品网
  • TensorFlow在风险管理VaR计算中的改进
  • RAG技术详解:让大模型“有据可依“的检索增强生成全攻略
  • “别让大模型‘一本正经胡说八道‘!RAG技术拯救AI幻觉,小白程序员也能上手的专业解决方案“
  • 数据溯源是大模型应用可信度的根本,没有溯源流程大模型的操作就会存疑
  • LLM评测指标终极指南:小白也能学会的大模型评估方法,快收藏!
  • 【质谱Open-AutoGLM技术突破】:揭秘下一代智能质谱分析引擎的核心原理
  • 利用TensorFlow镜像提升GPU算力效率,轻松训练大模型
  • 智普AutoGLM本地化实战指南(仅限高级用户访问)
  • 震惊!CARL算法让AI智能体“开窍“:只学关键动作,性能效率双提升
  • Java毕设选题推荐:基于springboot的社区居民服务系统的设计与实现 “便民服务 - 信息交互 - 事务管理” 的一体化平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Open-AutoGLM + Ollama应用全解析(大模型轻量化部署新纪元)
  • 从快手被黑产攻击看多模态大模型如何守护短视频内容安全
  • 小白变身挖洞大神:SRC 漏洞挖掘全攻略(附工具包 + 系统化学习路径)
  • 使用TensorFlow进行爆款文章预测模型
  • 一文吃透木马攻击,零基础到精通的实战秘籍,这篇必藏不亏
  • 一文读懂AI Agent记忆系统:短期与长期记忆架构全解析(珍藏指南)
  • 大模型产品经理学习路线详述,非常详细收藏我这一篇就可以了
  • 智能体(AI Agent)在企业落地的实践总结与避坑指南
  • 2025大模型产品经理黄金元年:7阶段学习路线+免费资源包助你高薪转型_零基础转行大模型产品经理
  • 从零开始构建一个基于 Gemini 3 的AI Agent(智能体)
  • 大模型如何成为业务系统的“能力调度者“(附架构图,建议收藏)