AC自动机
算法意义:
求多个字符串是否在主串中出现过。可依据情况分别求出出现次数,出现位置等。学习基础:
要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机的构造:
1.构造一棵Trie,作为AC自动机的搜索数据结构。2.构造fail指针,使当前字符失配时跳转到具有最长公共前后缀的字符继续匹配。如同 KMP算法一样, AC自动机在匹配时如果当前字符匹配失败,那么利用fail指针进行跳转。由此可知如果跳转,跳转后的串的前缀,必为跳转前的模式串的后缀并且跳转的新位置的深度(匹配字符个数)一定小于跳之前的节点。所以我们可以利用 bfs在 Trie上面进行 fail指针的求解。
3.扫描主串进行匹配。
AC自动机详讲:
我们给出5个单词,say,she,shr,he,her。给定字符串为yasherhs。问多少个单词在字符串中出现过?一、构建trie树
![](https://i-blog.csdnimg.cn/blog_migrate/c92242e6e2053dc3a1be31fb589bdf6c.jpeg)
首先这个trie树的每个节点必须包含以下元素:
1.一个失败指针,记录匹配失败后将要跳转的节点。 代码中的node *fail;