严蔚敏视频 笔记12
int Index_KMP(SString S,SString T,int pos)
克服了指针回溯的问题
求next函数值的过程是一个递推过程
已知next[1]=0
假设next[j]=k又T[j]=T[k]
则next[j+1]=k+1
void get_next(SString T,int &next[]) {
i=1; next[1]=0; j=0;
while(i<T[0]) {
if(j=0||T[i]=T[j]) {++i; ++j; next[i]=j;}
else j=next[j];
}
}
改进
void get_nextval(SString T,int &nextval[]) {
i=1; nextval[1]=0; j=0;
while(i<T[0]) {
if(j=0||T[i]=T[j]) {
++i; ++j;
if(T[i]|=T[j]) nextval[i]=j;
else nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
本章小结
1.熟悉串的7种基本操作的定义,并能用来实现其他各种操作
2.掌握在串的定长顺序存储结构上实现串的各种操作
3.掌握串的堆存储结构以及在其上实现串操作的基本方法
4.理解串匹配的KMP算法,熟悉next函数的定义,会手工计算给定模式串的next函数值和改进的next函数值
5.了解串操作的应用实例