病毒感染检测:串的模式匹配 BF、KMP算法
在网络入侵检测、计算机病毒特征码匹配以及DNA序列匹配等应用中都需要进行串的模式匹配。针对这个问题,书上讲了两种模式匹配的算法,即BF算法和KMP算法,下面针对这两种算法的实现谈谈我的思路。 |
1、代码部分
BF算法
#include<iostream>
using namespace std;
#include<string.h>
typedef struct{
char ch[1000001];
int length;
}SString;
SString S,T;
char s[1000001];
char t[1000001];
int Index_BF(SString S,SString T,int pos)
{
int i,j;
i=pos;
j=0;
while(i<=S.length-1 && j<=T.length-1)
{
if(S.ch[i]==T.ch[j]){
++i;
++j;
}
else {
i=i-j+1;
j=0;
}
}
if(j>T.length-1)
return i-T.length+1;
else
return 0;
}
int main()
{
cin>>s>>t;
strcpy(S.ch,s);
strcpy(T.ch,t);
S.length=strlen(S.ch);
T.length=strlen(T.ch);
cout<<Index_BF(S,T,0)<<endl;;
return 0;
}
KMP算法
#include<iostream>
using namespace std;
#include<string.h>
typedef struct{
char ch[1000002];
int length;
}SString;
SString S,T;
char s[1000002];
char t[1000002];
int nex[1000002];
int Index_KMP(SString S,SString T,int next[])
{
int i,j;
i=j=0;
while(i<=S.length-1 && j<=T.length-1)
{
if(j==-1||S.ch[i]==T.ch[j]){
++i;
++j;
}
else {
j=next[j];
}