package project;
public class newBM {
int count = 0;
int[] computeBMBc(String P){
int CHARSET = 65536;
int[] bmBc = new int[CHARSET];
int m = P.length();
for(int i = 0;i < 65536;i++)
bmBc[i] = m;
for(int i = 0;i < m-1;i++)
bmBc[(int)P.charAt(i)] = m - i -1;
return bmBc;
}//应该正确
int[] computeBMGs(String P){
int m = P.length();
int[] bmGs = new int[m];
int[] Rsuff = computeRsuff(P);
for(int i = 0;i<m;i++)
bmGs[i]=m;
int j = 0;
for(int i = m -2;i>=0;i--){
if(Rsuff[i]==i+1)
while(j<=m-i-2){
if(bmGs[j]==m)
bmGs[j]=m-i-1;
j = j+1;
}
}
for(int i=0;i<m-1;i++)
bmGs[m-Rsuff[i]-1]=m-i-1;// right
return bmGs;
}
int[] computeRsuff(String P){
int m = P.length();
int[] Rsuff = new int[m];
Rsuff[m-1] = m;// 是否为m?yes
for(int i = m-2;i>0;i--){
int j = i;
int k = m-1;
while(P.charAt(j)==P.charAt(k)){
if(j==0)
break;
if(j>0){
j--;
k--;
}
}
if(i==j){
Rsuff[i]=0;
}
else
Rsuff[i] = i-j;
}
if(P.charAt(0)==P.charAt(m-1))
Rsuff[0]=1;
return Rsuff;
}
void BM_Matcher(String P,String T){
int n = T.length();
int m = P.length();
int[] bmBc = computeBMBc(P);
int[] bmGs = computeBMGs(P);
int s = 0;
while(s<=n-m){
int i = m-1;
while(P.charAt(i)==T.charAt(s+i)){
count++;
if(i==0){
System.out.println("Pattern occurs with shift " + s);
s = s + java.lang.Math.max(bmGs[i], bmBc[(int)T.charAt(s+i)-m+i+1]);
}else
i = i-1;//这个地方有问题呀 孩子
}
count++;
if(i>0)
s = s + java.lang.Math.max(bmGs[i], bmBc[(int)T.charAt(s+i)-m+i+1]);
}
}
public static void main(String[] args){
String T = "abcdabheabhiacgabcde";
String p = "bc";
newBM bm = new newBM();
bm.BM_Matcher(p, T);
System.out.println("there is " + bm.count + " time matches");
}
}
newBM.rar_Boyer Moore_Boyer-Moore算法_boyer
版权申诉
42 浏览量
2022-09-21
05:00:02
上传
评论
收藏 1KB RAR 举报
四散
- 粉丝: 49
- 资源: 1万+
最新资源
- 基于YOLOv8和FASTAPI的图片物体检测API后端
- Unity3D(2019-2020)版本游戏源码(2019.4)SciFiFPS
- 深度学习练手数据集(包括蚂蚁的验证和训练图片)
- 很好的一个蜂群算法 基于matlab实现的源程序 从作者那要过来的.rar
- Unity3D(2019-2020)版本游戏源码(2019.3)2d像素农场游戏
- 基于matlab实现的 非线性振动必备工具箱,里面有详细的步奏讲解,频谱分析,poincare截面,分岔图,李雅普洛夫图.rar
- 基于matlab实现的,计算了duffing振子(杜芬振子)和非线性加幂律振子的响应
- 基于matlab实现的newmark方法求解非线性振动duffing方程.rar
- 基于Opencv+Pyqt5+python实现人脸互换人脸融合人脸特效人脸生成多功能系统完整源码+项目说明.zip
- ChroPath.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈