一个有限自动机M是一个5元组,(Q,q0,F,m,g)Q:状态的集合,q0:开始状态,F接收状态,m字符集,g:转换函数
文本字符串T,匹配模式P[1,2,3...m],每一个匹配模式都有一个对应的有限自动机,将字符串T按序输入到自动机中,如果到达接受状态,则匹配成功,下面介绍如何为P构造自动机。
1.状态集合Q为{0,1,2,3...m},开始状态q0是0,接受状态为m
2.对任意状态Q和字符a,转换函数g为:g(Q,a)=k(Pq a),Pq表示p[1]到p[q]的字符串,其中函数k(x)是一个从字母表(x)到{1,2,3...m}的映射,该函数是找到:既是字符串x的最长后缀,又是P的前缀的串,k(x)表示串的长度
下面对P求转换函数g的伪代码:
m=length[p]
for q:0 to m
for a:字母表
n=min(m,q+1)
while(n>=0)
if Pn是(Pq.a)的后缀(Pn与Pq.a从后往前对比)
g(q,a)=n
else n--
字符串T匹配自动机的过程的伪代码:
n=length[T]
q=0
for i:0 to n
q=g(q,T[i])
if q==m
匹配成功,输出i-m