BM算法也是一种字符串快速匹配算法。相对于KMP算法,BM算法往往比KMP快3-5倍。二者的区别在与匹配操作的方向不同,BM算法是将字符串左对齐,然后从右向左匹配,当匹配失败时,模式T右移的计算方法却发生了较大的变化。
public class BM {
/**
* @param c 主串(源串)中的字符
* @param T 模式串(目标串)字符数组
* @return 滑动距离
*/
private static int dist(char c, char T[]) {
int n = T.length;
if (c == T[n - 1]) {
return n;// c出现在模式串最后一位时
}
for (int i = n; i >=1; i--) {
if (T[i - 1] == c)
return n - i;// i=max{i|t[i-1]且0<=i<=n-2}
}
return n;// c不出现在模式中时
}
/**
* @param p_s
* @param p_t
* @return -2错误,-1匹配不到,[0,p_s.length-p_t.length]表示t在s中位置,下标从0开始
*/
public static int index(final String p_s, final String p_t) {
if (p_s == null || p_t == null) {
return -2;
}
char[] s = p_s.toCharArray();
char[] t = p_t.toCharArray();
int slen = s.length, tlen = t.length;
if (slen < tlen) {
return -1;
}
int i = tlen, j;
while (i <= slen) {
j = tlen;
while (j > 0 && s[i - 1] == t[j - 1]) {// S[i-1]与T[j-1]若匹配,则进行下一组比较;反之离开循环。
i--;
j--;
}
if (0 == j){// j=0时,表示完美匹配,返回其开始匹配的位置
return i ;//如果要匹配多个,这里改为:int pos=i;i = i+tlen+1; --其中每次这个pos就是位置
}else{
//System.out.println(dist(s[i - 1], t));
i = i + dist(s[i - 1], t);// 把主串和模式串均向右滑动一段距离dist(s[i-1]).即跳过dist(s[i-1])个字符无需比较
}
}
return -1;// 模式串与主串无法匹配
}
public static void main(String[] args) {
String s = "faabc";
String t = "abc";
System.out.println("==========:"+index(s,t));
}
}
分享到:
相关推荐
### BM算法详解 #### 一、BM算法简介 BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的...
**BM算法完整实现C代码** BM(Boyer-Moore)算法是一种在大文本中高效查找子串的字符串搜索算法,由Robert S. Boyer和J. Strothoff于1977年提出。相比于简单的线性查找,BM算法在处理大量数据时能显著提高查找效率...
### 得到视差图(BM算法) #### 知识点概述 在计算机视觉领域,双目视觉技术是一项重要的技术,它通过模拟人眼的工作原理,利用两台摄像机从不同角度拍摄同一场景来获取深度信息。其中一种常用的方法是BM(Block ...
BM算法,全称为Boyer-Moore算法,是一种在文本中高效查找子串的字符串匹配算法,由Robert S. Boyer和J Strother Moore在1977年提出。这个算法以其高效的性能和广泛的应用场景在计算机科学,特别是在文本处理、数据...
BM算法,全称为Boyer-Moore算法,是一种在文本字符串中高效查找子串的搜索算法。这个"BM算法修改版"显然对原始算法进行了优化,以适应从TXT文件中读取序列并进行连续计算的需求。下面将详细介绍BM算法的基本原理、...
BM算法和sunday算法是两种高效且广泛应用的字符串搜索算法,它们在计算机科学,特别是文本处理和信息检索领域中占有重要地位。这两种算法都致力于解决在一个大文本中查找子串出现位置的问题,对于大量数据的处理具有...
【基于BM算法的字符查询程序】是一个利用.NET Core框架实现的高效文本查询工具,它特别引入了BM(Boyer-Moore)算法来提升搜索效率,支持对单个字符和多个字符的快速查找。在现代信息技术领域,文本查询是基础且重要...
总的来说,这个项目提供了一个实用的双目视觉解决方案,结合了OpenCV的强大功能和BM算法,可以用于开发各种需要3D感知的应用,例如机器人导航、自动驾驶或增强现实。尽管原始代码可能需要进一步优化以提高精度和性能...
**字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...
### BM算法原理图示详细讲解 #### 一、BM算法简介 BM算法,全称为Boyer-Moore Algorithm,是一种高效的字符串匹配算法。它通过利用两种启发式规则——Bad-Character Rule(坏字符法则)和Good-Suffix Rule(好后缀...
BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,尤其在处理大量文本时,其性能通常优于KMP算法。BM算法的核心在于它采用了一种独特的移动策略,即在模式串(待查找的子字符串)的移动过程中,从左到右...
### 串匹配BF与BM算法详解及C++实现 #### 一、串匹配算法简介 在计算机科学领域,串匹配(String Matching)是一项基础而重要的技术,它涉及到在一串字符中寻找另一串字符的位置,这一过程在文本处理、数据检索等...
BM算法 c语言实现 详细注解 高手作品
本文将深入探讨三个关键概念:BM算法(Blum-Micali算法)、DES加密解密以及DSA(Digital Signature Algorithm)签名,这些都是信息安全领域的基石。 首先,让我们来了解BM算法,全称为Blum-Micali算法。这是一种...
AC-BM算法,全称是Aho-Corasick自动机(Aho-Corasick Algorithm),是一种在文本中高效地进行多模式匹配的算法。这个算法由Aho和Corasick在1975年提出,它扩展了KMP算法的功能,能够同时查找多个模式串在主串中的...
### 移位寄存器中的BM算法解析 #### BM算法简介 BM算法(Berlekamp-Massey Algorithm)是一种在编码理论中广泛使用的算法,它主要用于由一个已知的线性反馈移位寄存器(Linear Feedback Shift Register, LFSR)产生...
实现BF算法的改进算法:KMP算法和BM算法; 对上述3个算法进行时间复杂性分析,并设计实验程序验证分析结果。 附件中 3.3.h BF算法代码 3.5.h KMP算法代码 3.12.h BM算法代码
BM算法的相关资源吧,前两天看的,和大家分享
BM算法,全称为Boyer-Moore算法,是一种在文本字符串中查找子串的高效搜索算法,由Robert S. Boyer和J Strothoff在1977年提出。这个算法利用了两个主要的启发式规则:坏字符规则和好后缀规则,显著提升了在大数据...