字符串匹配-BDM算法

1、BDM算法使用后缀自动机搜索子串。后缀自动机决定字符串U是否为模式串P的子串图示如下:
1)可以在O(|U|)时间内确定个字符串U是否为字符P的子串,U是P的子串,当且仅当P的后缀自动机中存在一条要从初始状态开始的标号为U的路径,注意该路径不一定要到达终止状态。从上图可看出,CB也是CBA的子串。
2)可以识别模式串的所有后缀。从初始状态到某个终止状态的路径上字符组成的字符串是模式串P的一个后缀。
3)模式串P的对应的后缀自动机可以O(m)完成。
2、在文本T=T1 T2 T3。。。。。Tn中搜索模式串P=P1 P2。。。Pm
1)首先构建起模式串P的反转P(rv)=Pm P(m-1) ....P1对应的后缀自动机,反转的目的是为了得出P的前缀自动机。
2)算法使用后缀自动机在搜索窗口中从后向前搜索模式串的子串。搜索过程如果到达了终止状态,并且对应的不是整个模式中,则它在窗口中的位置存在变量last中,此时,可以说找到了当前识别的P的最长前缀,因为是P的反转的最长后缀。该缀从last开始到窗口尾处结束
3、搜索过程以下2种可能的方式结束:
1)在识别一个子串时失败了,即读入一个字符σ,在P的反缀自动机的当前状态没有σ转移,这时将窗口向右移动,使得它的起始位置与last对齐
2)抵达了窗口的起始位置,意味着整个模式串P被成功匹配,报告一个成功匹配,并像1)一样移动窗口。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值