码迷,mamicode.com
首页 > 其他好文 > 详细

AC自动机总结

时间:2018-04-20 22:01:41      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:状态   bsp   多少   包含   简单   常用   ...   fail   不包含   

AC自动机

简单谈谈。

图懒得放了。

 

其实就是一个\(Trie\)树+\(fail\)树的结合体。

\(fail\)指针可以视为指向自己在\(Trie\)树上存在的最长严格后缀(不是本身)

为了方便转移,可以将AC自动机改造

 if(!son[e][i]) son[e][i] = son[fail[e]][i]

(市面上都是这种,不过挺好用的,没必要改)

如果要打标记,可以在确定\(fail\)的时候写上

if(son[e][i]) {

  fail[son[e][i]] = son[fail[e]][i];

       mark[son[e][i]] |= mark[fail[son[e][i]]];

}

 

常用DP:

dp(i,j)表示构造到了第i位,AC自动机状态为j

 

要和数据结构套一般都是跟\(fail\)树有关,可以考虑建出\(fail\)树

 

在AC自动机上,到了j号节点匹配到的字符串是:

j, fail[j], fail[fail[j]], ...... , 0号节点代表的字符串

 

能够求出不包含多少串,但是无法求出包含串的个数。

 

上面的话都挺水的,能不能看懂就看你了。。。

AC自动机总结

标签:状态   bsp   多少   包含   简单   常用   ...   fail   不包含   

原文地址:https://www.cnblogs.com/reverymoon/p/8893509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!