AC自动机

AC自动机是Trie树与KMP思想的结合。用于多模式串匹配。

和KMP一样,它的原理就是:对所有模式串建一个Trie。任意一个串扔进去,得到的就是在Trie树上最长能匹配的后缀,我们把文本串的每个前缀依次加进去(前缀的后缀就是子串),就能得到模式串与文本串的关系了。

考虑到怎么实现这个功能:和KMP一样,我们需要一个类似 (nxt) 数组的东西,在AC自动机里我们称为 (fail) 指针。Trie中的每个节点通过 (fail) 指针指向它在Trie树里能匹配到的最长后缀。

在一些较为高阶的题目中,我们需要用的 (fail) 树: 每个节点都有唯一的 (fail) 指针,我们把这些指针看做树上儿子到父亲的边,就形成了一棵 (fail) 树。(fail) 树上每个节点都是其子树内节点的后缀,利用这个性质能很好的优化时间复杂度。

  • 例题:
  1. CF1202E You Are Given Some Strings... 题解
由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
原文地址:https://www.cnblogs.com/With-penguin/p/13155619.html