KMP算法的nextval[]即优化next[]

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

KMP算法的nextval[]即优化next[]
针对于next[]算法思路的考虑,其实在下标i失配时,⽐较下标i-1与前⾯的匹配情况找到最好匹配对象存在next[i]=j。

当我们再⽐较T[i]、T[j],相等跳过匹配,不相等做该做的匹配操作。

下⾯是代码
1void getnextval_2(char T[],int nextval[]){//直接相当于舍弃next求法,直接求nextval,不借助next[],直接优化⽐较,并且直接递推下去; 教材的⽅法 2int i,j;
3 i=0;
4 j=-1;
5 nextval[0]=-1;
6
7while(i<strlen(T)){
8if(j==-1||T[i]==T[j]){
9 i++;
10 j++;
11
12/**///——>重点理解地带:直接在T[]上求nextval,同于next[]的思想
13if(T[i]!=T[j]){ //前⼀个判断,求的与next⼀样,i++后,⽐较当前T[i]T[j]
14 nextval[i]=j;//不等,存储⼊nextval
15 }
16else{
17 nextval[i]=nextval[j];//相等,不⽤⽐较,跳过;nextval是从头开始递推的,每个值都是最优的
18 }
19/**/
20
21 }
22else{
23 j=nextval[j];
24 }
25 }
26 }
View Code
其实本质上思路与求next[]的想法⼀致,就只是在应该赋值进⼊next时,做⼀次⽐较,T[i]、T[j],相等跳过匹配,不相等做该做的匹配操作。

⼜由于基本算法是从递推关系出来的,相等,赋值前⼀个nextval[],不相等,直接赋值。

当若想借助next,求nextval。

相关文档
最新文档