留着以后慢慢做的AC自动机

来源:互联网 发布:wikipedia数据下载 编辑:程序博客网 时间:2024/06/11 01:08

来自http://www.cnblogs.com/kuangbin/p/3164106.html
有了KMP和Trie的基础,就可以学习神奇的AC自动机了。AC自动机其实就是在Trie树上实现KMP,可以完成多模式串的匹配。
AC自动机 其实 就是创建了一个状态的转移图,思想很重要。

推荐的学习链接:

http://acm.uestc.edu.cn/bbs/read.php?tid=4294

http://blog.csdn.net/niushuai666/article/details/7002823

http://hi.baidu.com/nialv7/item/ce1ce015d44a6ba7feded52d

AC自动机专题训练链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25605#overview
这里我提交的代码是公开的,可以看到

题目来源:http://www.notonlysuccess.com/index.php/aho-corasick-automaton/

写AC自动机的代码风格是向昀神学的,好简洁,写起来好棒的感觉。

1、HDU 2222 Keywords Search 最基本的入门题了
就是求目标串中出现了几个模式串。
很基础了。使用一个int型的end数组记录,查询一次。

2、HDU 2896 病毒侵袭
这题和上题差不多,要输出出现模式串的id,用end记录id就可以了。还有trie树的分支是128的

3、HDU 3065 病毒侵袭持续中
这题的变化也不大,就是需要输出每个模式串出现的次数,查询的时候使用一个数组进行记录就可以了

4、ZOJ 3430 Detect the Virus
主要是解码过程,解码以后就是模板题了。
求出现的模式串的种类数
分支需要256个

5、POJ 2778 DNA Sequence
AC自动机+矩阵加速
这个时候AC自动机 的一种状态转移图的思路就很透彻了。
AC自动机就是可以确定状态的转移。

6、HDU 2243 考研路茫茫——单词情结
这题和上题有些类似。但是需要求和。
所以给矩阵增加一维,这样可以完美解决

7、POJ 1625 Censored!
AC自动机+DP+高精度
好题

8、HDU 2825 Wireless Password
AC自动机+状态压缩DP
相当于在AC自动机上产生状态转移,然后进行dp

9、HDU 2296 Ring
需要输出字典序最小的解
在DP的时候加一个字符数组来记录就行了

10、HDU 2457 DNA repair
很简单的AC自动机+DP了

11、ZOJ 3228 Searching the String
这题需要查询两种,一种是可重叠,一种是不可重叠的。
找模式串在目标串中的出现次数。
加一个数组记录上一次出现的位置,然后就可以求出不可重叠的了

12、HDU 3341 Lost’s revenge
这题主要是状态的表示,就是记录ACGT出现的次数。
然后个ACGT次数表示的时候,状态要转化。

13、HDU 3247 Resource Archiver
使用最短路预处理出状态的转移。这样可以优化很多

14、ZOJ 3494 BCD Code
这道题很神,数位DP和AC自动机结合,太强大了。

原创粉丝点击