从功能上来说,AC 自动机是可以求解多个小串 AA多个长串 BB 的中是否出现过、出现的次数和每一次出现的位置。从具体实现上来说,AC 自动机就是在 trie 树上跑 KMP。其时间复杂度为线性的,是 O(A+B)O(\sum\lvert A\rvert+\sum\lvert B\rvert)

AC 自动机的失配指针与 KMP 的 nxtnxt 数组极为相似,可以参考理解。如果节点 ii 的失配指针为 jj,那么从根节点到 jj 的边上的字符形成的字符串应该与从 ii 出发向根节点行进 depjdep_j 步到达的点 kk 再从 kk 走到 ii 边上的字符形成的字符串一样,在满足 iji\ne j 的前提下,应该使 depjdep_j 尽可能的大。


对于上图,99 号节点的失配指针之所以是 22 是因为从根节点到 22 好节点边上的字符串 he\texttt{he} 与从 77 号节点到 99 好节点边上的字符串 he\texttt{he} 是一样的。