当前位置: 首页 > 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.zskr.cn/news/164038.html

相关文章:

  • 谈谈最近学习的低延迟直播架构的一些收获
  • 从新手到专家:Mac平台Open-AutoGLM安装疑难杂症一站式解决方案
  • 利用TensorFlow镜像提升GPU算力效率,轻松训练大模型
  • 震惊!CARL算法让AI智能体“开窍“:只学关键动作,性能效率双提升
  • 智普AutoGLM本地化实战指南(仅限高级用户访问)
  • 从快手被黑产攻击看多模态大模型如何守护短视频内容安全
  • 小白变身挖洞大神:SRC 漏洞挖掘全攻略(附工具包 + 系统化学习路径)
  • 大模型如何成为业务系统的“能力调度者“(附架构图,建议收藏)
  • 【本地部署智谱开源Open-AutoGLM全攻略】:手把手教你搭建企业级AI自动化平台
  • Java计算机毕设之基于SpringBoot+Web的影视资源管理系统设计与实现基于Web的影视资源管理系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【渗透测试】DVWA 靶场搭建保姆级指南(超详细),收藏这一篇就够了
  • 从“人+RPA”到“人+生成式AI+RPA”,LLM如何影响RPA人机交互?
  • 【AI爆点】LangGraph+阿里云百炼=无敌?小白程序员也能秒变AI代理开发大神!
  • 【AI黑科技】原来微调大模型这么简单!手把手教学,零基础也能30分钟搞定!小白程序员的AI进阶之路!
  • 【Open-AutoGLM性能优化指南】:3个关键指标提升模型推理效率200%
  • 使用TensorFlow进行广告文案自动生成
  • TensorFlow在量化交易策略回测中的应用
  • 救命!传统RAG遇到冲突证据就“宕机“?三段式推理让7B模型变身“判案高手“!
  • 基于TensorFlow的宏观经济指标预测模型
  • Java毕设选题推荐:基于Web的影视资源管理系统设计与实现存储影视剧本(分镜、台词)、素材信息(视频、音频、图片)【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 欧姆龙NJ PLC与汇川伺服驱动器联动:PDO映射及轮廓位置控制,扩展轴与绝对定位技术,节点步...
  • 当MATLAB遇上GUI:一个图像处理工具箱的实战拆解
  • 2025年靠谱GEO推广平台排行榜,实力强的GEO推广公司及制造商推荐 - 工业品牌热点
  • 揭秘Open-AutoGLM云主机底层架构:GPU利用率提升3倍的秘密
  • TensorFlow在智慧农业灌溉系统中的决策支持
  • 2025年毛巾服务商厂家推荐:毛巾精品定制靠谱的毛巾专业厂家有哪些? - 工业设备
  • 使用TensorFlow进行矿产资源勘探数据分析
  • 如何用TensorFlow识别上市公司风险信号?
  • 基于TensorFlow的危机公关响应建议
  • Open-AutoGLM能否彻底取代人工测试?3大真实案例告诉你答案