两种匹配模式效率的对比
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include "DString.h"
int BFIndexCount(DString S, int start, DString T){
int i = start, j = 0, v;
while(i<S.length && j<T.length){
if(S.str[i]==T.str[j]){
i++;
j++;
}else{
i=i-j+1;
j=0;
}
v++;
}
return v;
}
int KMPIndexCount(DString S, int start, DString T, int next[]){
int i = start,j=0,v=0;
while(i<S.length && j<T.length){
if(S.str[i]==T.str[j]){
i++;
j++;
}else if(j==0){
i++;
}else{
j = next[j];
}
v++;
}
return v;
}
void GetNext(DString T, int next[]){
int j=1,k=0;
next[0]=-1;
next[1]=0;
while(j<T.length-1){
if(T.str[j]==T.str[k]){
next[j+1] = k+1;
j++;
k++;
}else if(k==0){
next[j+1]=0;
j++;
}else{
k = next[k];
}
}
}
void main(void){
DString myString1, myString2;
int max1=6, max2=5;
int next[6];
int count;
Initiate(&myString1,max1,"cddcdc");
Initiate(&myString2,max2,"abcde");
count = BFIndexCount(myString1,0,myString2);
printf("Brute-Force算法比较次数:%d\n",count);
GetNext(myString2,next);
count = KMPIndexCount(myString1,0,myString2,next);
printf("KMP算法比较次数:%d\n",count);
DString myString3, myString4;
int max3=8, max4=3;
Initiate(&myString3,max3,"aaaaaaaa");
Initiate(&myString4,max3,"aab");
count = BFIndexCount(myString3,0,myString4);
printf("Brute-Force算法比较次数:%d\n",count);
GetNext(myString4,next);
count = KMPIndexCount(myString3,0,myString4,next);
printf("KMP算法比较次数:%d\n",count);
getch();
}