AC自动机の总结
来源:互联网 发布:淘宝有发票是正品么 编辑:程序博客网 时间:2024/05/21 09:56
AC 自动机の总结
算法の简介
给一“坨”串,再给一个串,求那一“坨”串中有多少个是那个串的子串
首先我们需要知道看毛片(kmp)和trie树这俩东西
算法大概的想法是将那一坨串放到一颗trie 树里面,并且建立与看毛片相似的fail指针减少冗杂的搜索状态
建树
在trie中每一个节点都有26只儿子,每次新读入一个字符串,我们就在trie中跑一遍,遇到新的节点就把ta存进去就好了
PROCEDURE MAKETREE(X,Y:LONGINT);BEGIN IF F[X,T[I][Y]]=0 THEN BEGIN INC(P); F[X,T[I][Y]]:=P; END; IF Y=C[I] THEN INC(G[F[X,T[I][Y]]]) ELSE IF Y<C[I] THEN MAKETREE(F[X,T[I][Y]],Y+1);END;
其中I表示当前在对第i个字符串处理
构建失败指针
这应该系AC自动机的核心部分了,若next[i]=j ,则
设p为根到j的距离,那么树中 第i-p层到第i层与根到j的字母都是相等的
如上图,两个b分别在第二和第三层,而root–>第二层的b=s–>第三层的b(不包括s和root)那么我们就可以在搜索时直接跳过去,而不用再搜索第一层的t啦~~
搜索
搜索就很简单了,从根开始搜索,如果当前所搜索到的节点的儿子为当前字符串正在寻求匹配的字符串那就走到儿子那里,否则一直跳到next[x]处,直到有一个节点的儿子为当前正在搜索的那个节点。。。(好拗口啊不过画一下图很容易明白)~
模版题:HDOJ2222(好2啊)
0 0
- AC自动机の总结
- AC自动机 初步总结
- AC自动机总结 part1
- AC自动机总结
- AC自动机 总结
- AC自动机总结
- AC自动机总结
- AC自动机复习总结
- 【总结】AC自动机
- AC自动机总结
- AC自动机 重点总结
- AC自动机总结
- AC自动机总结
- AC自动机总结
- AC自动机学习总结
- 字符串模板总结(一):AC自动机
- AC自动机+DP(总结)+hdu2457
- 关于AC自动机与DP的总结
- xml文档声明
- UVA11609Teams
- POJ2187:Beauty Contest
- 【NOIP2008提高组T3】传纸条-双线程动态规划
- linux中任务的调度
- AC自动机の总结
- 如何用卷积神经网络CNN识别手写数字集?
- 常用的数据库索引优化语句总结
- Mac下搭建Nodejs环境
- Uva 11324 The Largest Clique
- 37、面向对象-继承
- python核心编程学习笔记-2016-07-18-01-print
- 几种获取进程列表的方法
- Java Web 自定义MVC框架