您的位置:首页 > 其它

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的字符串有多少种。
    题目有点多,而且有的也很难,持续更新。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AC自动机