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

一个有限自动机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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值