字符串匹配-BM算法
来源:互联网 发布:代办网络经营许可证 编辑:程序博客网 时间:2024/04/30 01:29
BM算法
1、 三个shift函数:d1,d2,d3,函数的作用是决定当匹配不成功时窗口的移动位数。
2、 假设一个情况:已经读入了一个既是搜索窗口中的文本的后缀,同时也是模式串后缀的字符串u,并且读入的下一个文本字符σ与模式串的下一个字符a不相等。
3、 窗口安全移动是指窗口移动意味着读入新的字符,放弃上一个窗口的前面几个字符,要保证放弃的字符确实无法参与匹配。窗口移动方向是从前向后。算法的核心思想是对于模式串,可能至少有2个相同部分,这些部分肯定有一个在模式串的后缀,其它的部分可能在模式串的中间,也可能在模式串的前缀,在后缀搜索时,发现了文本串和模式串的部分匹配X,此时,如果模式串除了后缀外,其它部分还含有X,则使文本串和模式中发生不匹配的读入的字符加上原来的匹配的X形成的部分有可能与模式串其它部分的X发生匹配(如果与模式串所有的X不匹配,则说明这个窗口内不可能发生匹配),安全地向后移动窗口,放弃的部分肯定不会发生匹配了。
1) d1:后缀u在模式串p中的另一个位置是最右出现位置是j(不包括在模式串尾的出现),文本串的窗口安全移动方法是将窗口移动m-j字符,使文本中的u与模式串中最右边的u的出现位置相对齐。对模式中的每个后缀,计算它到它的下一个出现之间的距离,即shift的d1,如果P的后缀u不在P中重复出现,则d1(u)被置为模式串长度m
2) d2:后缀u不出现在p中的任何其他位置。但u的后缀v可能是模式串p的一个前缀,需要对模式串所有的后缀计算第二个函数d2。对于P的每个后缀u,d2(u)表示既是P的前缀,同时也是u的后缀的最长字符串v的长度.
3) d3:在搜索窗口中从后向前搜索时,在文本字符σ处不能成功匹配。保证下一次验证时文本字符σ一定与模式串中的一个字符σ相对应(即:使上次匹配不成功的那个字符能在模式串的第二个X部分匹配成功,在模式串中找到这个字符,该字符是X的前面一个字符),对每个字母表中的每个字符σ,d3(σ)表示σ在模式串的最右出现位置到模式串末尾的距离,如果σ不在P中,d3为m
4、 读入文本字符串u并在字符σ上不匹配时,进行如下几次比较:
1) 第一次:取d1(u)和d3(σ)中较大值。
2) 第二次:以上面的比较结果与m-d2(u)中的较小者,因为后者是最大的安全移动距离。
5、如果抵达了窗口的起始位置,说明发现阶段一个成功匹配,用d2计算窗口的下一次移动距离,进行继续匹配。
- BM字符串匹配算法
- BM字符串匹配算法
- 字符串匹配-BM算法
- BM字符串匹配算法
- BM字符串匹配算法
- BM字符串匹配算法
- BM算法 字符串匹配算法
- 字符串匹配之BM算法
- 字符串匹配之BM算法
- 字符串匹配 — BM算法
- 字符串匹配之BM算法
- BM字符串匹配算法解析
- BM字符串匹配算法笔记
- 字符串模式匹配算法---BM算法
- 字符串匹配算法——BM算法
- 字符串模式匹配的BM算法
- BM字符串匹配算法的java实现
- 字符串模式匹配的BM算法
- 堆和栈的区别
- <jsp:directive.page import 用法
- 贪吃蛇蛇移动代码keil+c+proteus实现
- 字符串匹配-Horpool算法
- 北大ACM-题型分类(转载)
- 字符串匹配-BM算法
- 字符串匹配-基本搜索方法
- 32到64位的数据迁移
- vim 简介
- ALSA SOC架构关键点
- tokyo tyrant 在 php 上不能自动反序列化的问题
- ftp可以正常登录,但登录后执行ftp命令没有响应
- 字符串匹配-位并行和复杂度表示法
- ibatis这问题哪里错了,查不出数据