前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AC自动机小结

AC自动机小结

作者头像
attack
发布2018-07-04 11:42:54
6730
发布2018-07-04 11:42:54
举报

总结一下自己的心得体会,不讲算法。。

AC自动机

AC自动机即Trie+KMP?是解决多模式串匹配的一种算法

它的构造方式如下:

  1. 将模式串全部插入Trie树种
  2. 获取Trie树的fail指针
  3. 枚举模式串在Trie树上进行匹配

注意:在一般的匹配问题中,我们会把trie树补为trie图,虽然这样会极大的降低匹配时间,但是当利用的$fail$树中各节点相对位置(例如lca)的时候不建议这么做

性质

如无特殊说明,$x$表示从$root$到$x$节点形成的字符串

1.$x$的$fail$指针指向的$y$为模式串中在$x$之前插入的串中与$x$有着最长公共后缀的前缀

2.$x$在$y$中出现的此处为$y$的路径中,$fail$指针指向$x$的节点的数量

BZOJ2434: [Noi2011]阿狸的打字机

洛谷P3966 [TJOI2013]单词

3.点$x$与点$y$在$fail$树中$lca$处的到的字符串,为模式串中与$x,y$公共后缀最长的前缀

BZOJ2746: [HEOI2012]旅行问题

AC自动机还经常与dp结合食用,套路一般为$fi$表示当前长度为$i$,在AC自动机上第$j$号节点时的答案,转移的时候枚举出边

时间复杂度

Tire树暴跳fail的复杂度为$O(max(L(P_i))L(T))$其中L串的长度函数,P是模式串,T是目标串。

比如模式串为$aaaaaaaaaaaaaaaaaaaaa$

Trie图的时间复杂性为:$O(L(T))$

对于构造的代价是$O(sum(L(P_i)))$其中sum是求和函数。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AC自动机
    • 性质
      • 时间复杂度
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档