KMP算法优化
对KMP算法进行的优化,主要是在于对next数组进行的优化
把优化后的数组命名为nextval[ ]
首先我们先看KMP算法的相关代码:
void get_next(String T,int next[]){
int i=1,j=0;
next[1]=0;
while(i<T.length){
if(j==0||T.ch[i]==T.ch[j]){
++i;++j;
//若pi=pj,则next[j+1]=next[j]+1
next[i]=j;
}
else{
j=next[j];
}
}
}
int Index_KMP(String S,String T){
int i=1,j=1;
int next[T.length+1];
get_next(T,next);
while(i<=S.length&&j<=T.length){
if(j==0||S.ch[i]==T.ch[j]){
++i;
++j;
}
else{
j=next[j];
}
}
if(j>T.length){
return i-T.length;
}
else return 0;
}
nextval数组的求法
先算出next数组
先令nextval[1]=0
/*nextval数组的求法
先算出next数组
先令nextval[1]=0*/
for(int j=2;j<=T.length;j++){
if(T.ch[next[j]]==T.ch[j])
nextval[j]=nextval[next[j]];
else
nextval[j]=next[j];
}
KMP算法优化,当子串与模式串不匹配时j=nextval[j]