ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构笔记学习

2021-09-20 12:01:40  阅读:155  来源: 互联网

标签:主串 字符 模式 next 学习 笔记 KMP 数据结构 个字符


数据结构的学习-KMP算法
在这里插入图片描述
KMP算法是对BF算法的进一步改进,当匹配字符不相等时不需要回溯i指针 只需要滑动子串移动j的位置,匹配时仅需从模式串中第K个字符与第i个字符开始依次向后比较,那如何确定模式串j中开始匹配的第K个字符的位置呢

令 n e x t [ j ] = k next[j]=k next[j]=k,则 n e x t [ j ] next[j] next[j]表明当模式中第j个字符与字符中相应字符不匹配时,在模式中需要重新和主串中该字符进行比较的字符的位置。
S是主串 T是模式串
模式串的next函数的定义:

  1. n e x t [ j ] next[j] next[j]=0 j=1 (默认next[j]的第一位是0)
  2. n e x t [ j ] next[j] next[j]=MAX { ( k ∣ 1 < k < j k| 1<k<j k∣1<k<j 且判断 模式串的前缀和后缀相等的个数有多少(N), 则K-1=N,由此得K值,则 n e x t [ j ] = k next[j]=k next[j]=k}
  3. n e x t [ j ] next[j] next[j]=1 {K=1(当不存在相同子串时,进行下一步比较,这就属于其他情况K值等于1)}
    (小白刚上手写个导图的样式也不太容易啊,呜呜呜呜呜呜)

n e x t v a l [ j ] nextval[j] nextval[j]修正函数值求解

在这里插入图片描述

KMP算法
 int index_KMP(SString S,SString T,int pos)   ///S是主串 T是模式串
                   { //利用模式串T的next函数求T在主串S中第POS个字符之后的位置
                        //其中,T非空,1<=pos<=S.lengh
                        i=pos; j=1;   //初始化
                       while(i<=S.length && j<=T.length)  //两个串均未比较到串尾
                          { 
                              if(S.ch[i]==T.ch[j]) 
                                 {++i;++j;} //继续比较后继字符
                              else {
                                 j=next[j]; }       ///主串i不变,模式串j后退即模式串右移 
                              }      
                       if(j>T.length)  return i-T.length; ///匹配成功
                           else return 0;  //匹配失败 }

就这样吧,,,,,,,,,会计算NEXT和NEXTVAL的值就好了。。。。。中秋节快乐啊,记得吃月饼。

我累了需要躺一会【葛优躺.jpg】

标签:主串,字符,模式,next,学习,笔记,KMP,数据结构,个字符
来源: https://blog.csdn.net/weixin_44797881/article/details/120389057

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有