`
deepfuture
  • 浏览: 4329553 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79390
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68284
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101376
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:280946
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14583
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65454
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31270
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45147
社区版块
存档分类
最新评论

字符串匹配-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)一样移动窗口。

 

  • 大小: 27.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics