BM算法简单实现
来源:互联网 发布:css3动画和js动画 编辑:程序博客网 时间:2024/04/30 22:19
BM算法是Boyer-Moore算法的简称,由Boyer 和Moore提出。
BM算法也是一种字符串快速匹配算法。相对于KMP算法,BM算法往往比KMP快3-5倍。二者的区别在与匹配操作的方向不同,BM算法是将字符串左对齐,然后从右向左匹配,当匹配失败时,模式T右移的计算方法却发生了较大的变化。
滑动距离函数:
为方便讨论,BM算法的关键是,对给定的模式T="t0t1…tm"定义一个从字符到正整数的映射:
distance :c->{1,2,…,m+1}
函数distance称为滑动距离函数,它给出了正文中可能出现的任意字符在模式中的位置。函数distance定义如下:
dist(c) = m-j j为c在模式中的下标,以后面的为准
dist(c) = m+1 若c不在模式中或c = tm
例如,T="pattern",则dist(p)= 6 – 0 = 6, dist(a)= 6 – 1 =5, distance(t)=6-3=3,dist(e)= 2, dist(r)= 1, dist(n)= 6 + 1 = 7。
BM算法的基本思想是:
假设将主串中自位置i起往左的一个子串与模式进行从右到左的匹配过程中,若发现不匹配,则下次应从主串的i + dist(si)位置开始重新进行新一轮的匹配,其效果相当于把模式和主串向右滑过一段距离distance(si),即跳过distance(si)个字符而无需进行比较。
一个具体的例子,如下图所示:
其实现如下:
- BM算法简单实现
- BM算法实现
- BM算法实现源代码
- bm 算法实现
- BM 算法 Cpp 实现
- BM算法C语言实现
- BM算法的C++实现
- BM算法与Horspool算法及其实现
- BM算法的C++改进实现
- BM模式匹配算法I C++实现
- snort中的BM算法(c语言实现)
- BM字符串匹配算法的java实现
- java 实现的Boyer-Moore(BM)算法
- BM算法(Boyer-Moore) (JAVA实现)
- java实现子字符串的BM算法
- BM模式匹配算法I C++实现
- 用JAVA语言实现的BM算法
- Berlekamp Massey(BM)算法的C实现
- Java 关于线程同步的问题
- 中继卡与语音卡
- 一般处理程序(.ashx)中处理cookies的方法解决
- 用Tcpdump抓取MySQL执行的SQL
- 关于m//g的问题
- BM算法简单实现
- quake3使用指南
- 使用VC++使用开发Web服务(ISAPI extension - mod_gsoap.dll)1
- 菜鸟程序员之不认识的符号
- 使用VC++使用开发Web服务(ISAPI extension - mod_gsoap.dll) 2
- 管道、进程及其他
- uva 567 risk
- 新的陆航,启程!
- 自已作的屏保程序