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... 题解
posted @ 2020-06-18 07:06  With_penguin  阅读(60)  评论(0编辑  收藏  举报