一、Aho-Corasic算法Python使用官方教程
二、Aho-Corasic算法的定义及功能
2.1 Aho-Corasick算法的定义
Aho-Corasick(简称为AC自动机),是一种
基于前缀的
,使用了确定有限自动机(DFA)
原理的,字符串多模匹配算法
。
什么是DFA?
- DFA也就是 确定有限自动机,英文全称是Deterministic Finite Automaton。具体的细节介绍,可以参照百度百科、维基百科,以及《算法导论》之类的算法书。在这里,我们尝试用通俗的语言和图示来解释一遍。
我们一个一个字母的来解释DFA的含义:
- 首先, 什么是自动机(A)。
自动机
就是一个代码块
。这段代码块只做一件事,那就是接收输入值
和状态值
,输出同为状态值的结果
。图表述如下: -
- 其次,下一个字母—— 有限(F),是指
自动机接收、输入的状态种类是有限的
。而相对应的,非有限自动机的状态就是有无限种的。 - 再者,下一个字母—— 确定的(D),是指
自动机的输出状态是单一的一个状态
。如果不太好理解的话,那就是看一下对应的非确定自动机。这种自动机的输出状态,就不是单一的,而是许多个状态的集合。用图示来表述,就是下面这样:(先有限,后无限) -
-
所以三个字母合起来以后, DFA 的意思就像英文全称一样了, 是一种状态值种类有限,且返回结果单一的自动机。 简单的代码例子:
def automata (value, state):
if state == 0:
if value == 'a':
return 0
elif value == 'b':
return 1
elif state == 1:
if value == 'a':
return 0
elif value == 'b':
return 1
上面的这段代码,其内部的状态转化逻辑
,可以用图示(也就是所谓的状态转化图
)表示: