AC自动机算法学习
KMP+TRIE
int val[1000100][31],tot;
int tr[1000100];
int fail[1000100];
struct AC_Trie{
	void clean(){
		tot=0;
		memset(val,0,sizeof(val));
		memset(tr,0,sizeof(tr));
		memset(fail,0,sizeof(fail));
	}
	void build(){
		queue<int> q;
		memset(fail,0,sizeof(fail));
		while(!q.empty()) q.pop();
		for(int i=0;i<26;i++) if(val[0][i]!=0) q.push(val[0][i]);
		while(!q.empty()){
			int u=q.front();q.pop();
			for(int i=0;i<26;i++){
				if(val[u][i]!=0){
					fail[val[u][i]]=val[fail[u]][i];
					q.push(val[u][i]);
				}else{
					val[u][i]=val[fail[u]][i];
				}
			}
		}
	}
	void insert(string x){
		int len=x.length(),p=0;
		for(int i=0;i<len;i++){
			int c=x[i]-'a';
			if(val[p][c]==0) tot++,val[p][c]=tot;
			p=val[p][c];
		}
		tr[p]++;
	}
	int find(string x){
		int len=x.length(),p=0,res=0;
		for(int i=0;i<len;i++){
			p=val[p][x[i]-'a'];
			for(int j=p;j&&~tr[j];j=fail[j]) res+=tr[j],tr[j]=-1;
		}
		return res;
	}
}tree;
AC自动机算法学习的更多相关文章
- AC自动机-算法详解
		What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ... 
- AC自动机算法详解
		首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章, ... 
- AC自动机算法详解  (转载)
		首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章, ... 
- (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法
		原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ... 
- 转载 - AC自动机算法
		出处:http://blog.csdn.net/niushuai666/article/details/7002823 AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick aut ... 
- 「AC自动机」学习笔记
		AC自动机(Aho-Corasick Automaton),虽然不能够帮你自动AC,但是真的还是非常神奇的一个数据结构.AC自动机用来处理多模式串匹配问题,可以看做是KMP(单模式串匹配问题)的升级版 ... 
- AC自动机算法小结
		AC自动机,可惜不能自动AC 转载:飘过的小牛 OIer55242 简介 Aho-Corasick automation 该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就 ... 
- AC自动机算法
		AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段 ... 
- AC自动机算法 && 例题
		参考链接: https://blog.csdn.net/bestsort/article/details/82947639#commentBox https://blog.csdn.net/niush ... 
随机推荐
- linq 获取列表最大值
			string depth = formList.OrderByDescending(s => s.VersionId).FirstOrDefault().VersionId; 
- 【题解】 bzoj2748 [HAOI2012]音量调节 (动态规划)
			懒得复制,戳我戳我 Solution: 傻逼题目,直接dp就可以了,他是求最后一次的最大值 Code: //It is coded by Ning_Mew on 4.17 #include<bi ... 
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
			题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ... 
- 前端学习 -- Css -- 盒子模式
			框模型: CSS处理网页时,它认为每个元素都包含在一个不可见的盒子里. 为什么要想象成盒子呢?因为如果把所有的元素都想象成盒子,那么我们对网页的布局就相当于是摆放盒子.我们只需要将相应的盒子摆放到网页 ... 
- emoji表情与unicode编码互转(JS,JAVA,C#)
			1.表情字符转编码 [C#] Encoding.UTF32.GetBytes(" 
- 960CSS框架,之前有用过 了解下框架基本原理
			http://blog.sina.com.cn/s/blog_8173443e010160b8.html CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够 ... 
- linux command ------ dmesg
			驱动开发中使用函数 printk() 打印的信息可以通过 dmesg 查看 简介 ‘dmesg’命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构.cpu.挂载的硬件,RAM等多个运 ... 
- win下jdk7环境变量的配置
			win下jdk7环境变量的配置: 单击计算机(Computer),选择属性(Properties),选择高级系统设置(Advanced systems settings), 选择环境变量(Enviro ... 
- Hadoop生态圈-flume日志收集工具完全分布式部署
			Hadoop生态圈-flume日志收集工具完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 目前为止,Hadoop的一个主流应用就是对于大规模web日志的分析和处理 ... 
- C#的Lamda表达式_匿名函数
