背景
给出一个字典,和若干询问:多少个字典串在询问串中出现过。
即单串与多串的匹配问题。
AC自动机
AC 自动机基于 Trie,将 KMP 的 Border 概念推广到多模式串上。
AC 自动机是一种离线型数据结构,即不支持增量添加新的字符串。
AC 自动机常用于将字符串询问类的问题进行离线处理,也经常与各种 DP 结合,或是补全成 Trie 图。
border概念的推广
推广到两个串:对于两个串 S 和 T,相等的 p 长度的 S 的后缀和 T 的
前缀称为一个 border。
推广到一个字典:对于串 S 和一个字典 D,相等的 p 长度的 S 的后缀,
和任意一个字典串 T 的前缀称为一个 border。
失配(Fail)指针: 对于 Trie 中的每一个节点(即某个字典串的前缀),
它与 Trie 中所有串的最大 Border 即为失配指针。
失配指针
类似与 KMP 求 Border,任意节点的 Border 长度减一,一定是父节点的
Border。因此可以通过遍历父节点的失配指针链来求解。
因此在求失配指针的时候,一定要按长度从小到大来求,即 bfs。
复杂度分析
类似于 KMP 的势能分析方法,势能总量等于 Trie 的节点总数,因此复
杂度为线性的。