AC自动机
AC自动机是Trie树与KMP思想的结合。用于多模式串匹配。
和KMP一样,它的原理就是:对所有模式串建一个Trie。任意一个串扔进去,得到的就是在Trie树上最长能匹配的后缀,我们把文本串的每个前缀依次加进去(前缀的后缀就是子串),就能得到模式串与文本串的关系了。
考虑到怎么实现这个功能:和KMP一样,我们需要一个类似 \(nxt\) 数组的东西,在AC自动机里我们称为 \(fail\) 指针。Trie中的每个节点通过 \(fail\) 指针指向它在Trie树里能匹配到的最长后缀。
在一些较为高阶的题目中,我们需要用的 \(fail\) 树: 每个节点都有唯一的 \(fail\) 指针,我们把这些指针看做树上儿子到父亲的边,就形成了一棵 \(fail\) 树。\(fail\) 树上每个节点都是其子树内节点的后缀,利用这个性质能很好的优化时间复杂度。
- 例题:
由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!