AC自动机相关
2013-08-02 14:38
260 查看
关于AC自动机,没有多讲的。别人讲的在多也不如自己去看论文。这就是真理啊。
下面是下载地址:
Aho-Korasick Automaton的原版论文
notonlysuccess博客推荐的论文
AC 自动机就是要构造一个模式匹配机
模式匹配机有一系列的状态(state),每个状态用一个正整数表示
模式匹配机还有状态转移函数和一个输出函数
当来一个字符x时,模式匹配机就处理这个字符,如果有这个字符确定的状态,那么就匹配下一个字符,没有就状态转移。
以上就是AC自动机的大致意思。
但是还是要解决两个问题:
和状态有关的goto function
和状态转移有关的failure function
其中goto function的构造直接用字典树,failure function利用kmp算法的思想。
主要注意一下几点:
1)用一个val数组来标记该结点是否为一个keyword的结尾,当然了在实践中val还可以记录模式出现的次数,而且keyword先出现的在val中的位置也靠前
2)一个在字典树中,一个叶子结点可能同时是多个keyword的结尾,所以可以开一个last数组记录,也可以写一个while循环,以此推导出。
3)一些细节上的优化,这个不是特别懂,虽说不是很影响效率。但还需要自己在琢磨琢磨。
4)将所有结点的之间都用边连接起来,就是一个有向图了,在这个有向图中可以用矩阵或者DP处理。
下面是AC自动机的题目
模板题:
Hdu 2222 Keywords Search
Hdu 2896 病毒侵袭
Hdu 3065 病毒侵袭持续中
AC+DP的题:
Poj 3691 DNA repair
这道题首先建一个有向图,然后再图上进行DP。
当开始匹配的时候,一定是从状态0开始匹配,然后可以不断的修改字符,用d(i,j),表示当匹配母串第i个字符时,在状态j需要的修改的字符数。那么可以得到下面的递推关系式:d(i+1,next(j)) = d(i,j) + (idc(j) = T[i]) ? 0 :1
AC + 矩阵的题:
Poj 2778 DNA Sequence
这道题首先建一个有向图,在将有向图转化为一个矩阵,通过就矩阵的快速幂得到答案。
矩阵matrix[i][j]表示的是从i到j的路径数,然后求matrix^n次幂,就可以得到从i到j走n步的路径数,也就是长为n的字符串有多少种。
题目有点多,而且有的也很难,持续更新。。。。。。
下面是下载地址:
Aho-Korasick Automaton的原版论文
notonlysuccess博客推荐的论文
AC 自动机就是要构造一个模式匹配机
模式匹配机有一系列的状态(state),每个状态用一个正整数表示
模式匹配机还有状态转移函数和一个输出函数
当来一个字符x时,模式匹配机就处理这个字符,如果有这个字符确定的状态,那么就匹配下一个字符,没有就状态转移。
以上就是AC自动机的大致意思。
但是还是要解决两个问题:
和状态有关的goto function
和状态转移有关的failure function
其中goto function的构造直接用字典树,failure function利用kmp算法的思想。
主要注意一下几点:
1)用一个val数组来标记该结点是否为一个keyword的结尾,当然了在实践中val还可以记录模式出现的次数,而且keyword先出现的在val中的位置也靠前
2)一个在字典树中,一个叶子结点可能同时是多个keyword的结尾,所以可以开一个last数组记录,也可以写一个while循环,以此推导出。
3)一些细节上的优化,这个不是特别懂,虽说不是很影响效率。但还需要自己在琢磨琢磨。
4)将所有结点的之间都用边连接起来,就是一个有向图了,在这个有向图中可以用矩阵或者DP处理。
下面是AC自动机的题目
模板题:
Hdu 2222 Keywords Search
Hdu 2896 病毒侵袭
Hdu 3065 病毒侵袭持续中
AC+DP的题:
Poj 3691 DNA repair
这道题首先建一个有向图,然后再图上进行DP。
当开始匹配的时候,一定是从状态0开始匹配,然后可以不断的修改字符,用d(i,j),表示当匹配母串第i个字符时,在状态j需要的修改的字符数。那么可以得到下面的递推关系式:d(i+1,next(j)) = d(i,j) + (idc(j) = T[i]) ? 0 :1
AC + 矩阵的题:
Poj 2778 DNA Sequence
这道题首先建一个有向图,在将有向图转化为一个矩阵,通过就矩阵的快速幂得到答案。
矩阵matrix[i][j]表示的是从i到j的路径数,然后求matrix^n次幂,就可以得到从i到j走n步的路径数,也就是长为n的字符串有多少种。
题目有点多,而且有的也很难,持续更新。。。。。。
相关文章推荐
- AC自动机相关Fail树和Trie图相关基础知识
- ac自动机及相关dp
- Java手机软件图形界面API之Form相关API(转)
- Windows Socket 网络编程(一) —— TCP/IP体系结构、特点及相关术语
- 按钮、声音相关、鼠标相关
- CEGUI相关
- 开发swt/jface工程的buildpath加载jar包的相关问题
- 织梦相关文章调用方法
- EMC存储多路径软件安装配置及相关命令
- c++中 类的相关事项(1)
- Android中View绘制流程以及invalidate()等相关方法分析
- 软件测试技术的相关题目
- Servlet与JSP 相关面试题
- Sql Server数据库锁相关知识
- 高德地图定位相关API
- Android GreenDao相关
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——4.2 屏幕朝向,手机姿态的相关概念
- 二叉树以及相关的面试题
- Java中大数的相关计算
- 链表、队列、栈和字符串的相关应用(四)字符串的替换