您的位置:首页 > 其它

利用有限自动机进行字符串匹配

2015-11-03 15:42 260 查看
一个有限自动机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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: