序
本文简单介绍下敏感词或者脏词检测算法。
经典AC算法
经典的AC算法由三部分构成,goto表,fail表和output表,共包含四种具体的算法,分别是计算三张查找表的算法以及AC算法本身。
- goto表是由模式集合P中的所有模式构成的状态转移自动机。(
goto表就是一棵trie树
) - failure表作用是在goto表中匹配失败后状态跳转的依据,这点与KMP中next表的作用相似。(
这个表是trie树没有的,加了这个表,AC自动机就看起来不像一棵树,而像一个图
) - output表示输出,又称:emits,即代表到达某个状态后某个模式串匹配成功
AC自动机本质上来说是一种基于trie树的kmp算法,AC算法需要三个函数来进行字符串匹配,而且这三个函数的求解都和一个确定的DFA(有限状态自动机)有关。
普通DFA算法
确定性有穷自动机,用于正则表达式的匹配,最长左子式匹配