36 | AC自动机:如何用多模式串匹配实现敏感词过滤功能?

2019/11/20 posted in  极客-数据结构与算法之美
  • 基于单模式串和 Trie 树实现的敏感词过滤
  • 经典的多模式串匹配算法:AC 自动机

基于单模式串和 Trie 树实现的敏感词过滤

经典的多模式串匹配算法:AC 自动机

解答开篇

内容小结

今天我们讲了多模式串匹配算法,AC 自动机。单模式串匹配算法是为了快速在主串中查找一个模式串,而多模式串匹配算法是为了快速在主串中查找多个模式串。

AC 自动机是基于 Trie 树的一种改进算法,它跟 Trie 树的关系,就像单模式串中,KMP 算法与 BF 算法的关系一样。KMP 算法中有一个非常关键的 next 数组,类比到 AC 自动机中就是失败指针。而且,AC 自动机失败指针的构建过程,跟 KMP 算法中计算 next 数组极其相似。所以,要理解 AC 自动机,最好先掌握 KMP 算法,因为 AC 自动机其实就是 KMP 算法在多模式串上的改造。

整个 AC 自动机算法包含两个部分,第一部分是将多个模式串构建成 AC 自动机,第二部分是在 AC 自动机中匹配主串。第一部分又分为两个小的步骤,一个是将模式串构建成 Trie 树,另一个是在 Trie 树上构建失败指针。