针对于next[]算法思路的考虑,其实在下标i失配时,比较下标i-1与前面的匹配情况找到最好匹配对象存在next[i]=j。当我们再比较T[i]、T[j],相等跳过匹配,不相等做该做的匹配操作。

下面是代码

 1 void getnextval_2(char T[],int nextval[]){//直接相当于舍弃next求法,直接求nextval,不借助next[],直接优化比较,并且直接递推下去; 教材的方法
 2     int i,j;
 3     i=0;
 4     j=-1;
 5     nextval[0]=-1;
 6
 7     while(i<strlen(T)){
 8         if(j==-1||T[i]==T[j]){
 9             i++;
10             j++;
11
12             /**///——>重点理解地带:直接在T[]上求nextval,同于next[]的思想
13             if(T[i]!=T[j]){   //前一个判断,求的与next一样,i++后,比较当前T[i]T[j]
14                 nextval[i]=j;//不等,存储入nextval
15             }
16             else{
17                 nextval[i]=nextval[j];//相等,不用比较,跳过;nextval是从头开始递推的,每个值都是最优的
18             }
19             /**/
20
21         }
22         else{
23             j=nextval[j];
24         }
25     }
26 }

View Code

  其实本质上思路与求next[]的想法一致,就只是在应该赋值进入next时,做一次比较,T[i]、T[j],相等跳过匹配,不相等做该做的匹配操作。又由于基本算法是从递推关系出来的,相等,赋值前一个nextval[],不相等,直接赋值。

当若想借助next,求nextval

转载于:https://www.cnblogs.com/wssblogs/p/7711313.html

KMP算法的nextval[] 即优化next[]相关推荐

  1. KMP算法 → 计算nextval数组

    [算法解析] ● 众所周知,KMP算法中模式串T的next数组,是KMP算法的核心. next数组的核心作用是"当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时) ...

  2. 串的模式匹配、KMP算法、nextval数组求法

    一.暴力匹配 #include <iostream> using namespace std; #define MAXLEN 255 typedef struct{char ch[MAXL ...

  3. 模式匹配算法----KMP算法以及next数组的解法

    KMP算法:求字符串匹配(也叫模式匹配)的算法,即给定一个字符串,求其某一子串在其中出现的位置. 普通模式匹配 例如:给定字符串为abcabaaabaabcac,求其子串abaabcac在其中出现的位 ...

  4. 数据结构 4 字符匹配-KMP算法

    第四章主要介绍的是串,但是串的实现没什么必要,最重要的知识点在于KMP算法的使用,大二时数据结构总结过一次KMP算法,大二时总结的比较细致,链接如下: https://blog.csdn.net/we ...

  5. KMP算法(多种实现方式)

    KMP算法核心思想 利用已经匹配的数据,去除无效的从头匹配 KMP算法流程 首先我们找到 i=9,j=9时不匹配,如果时暴力算法,此时i应重新来到i=2的位置,j返回j=1的位置,开始新一轮的匹配 这 ...

  6. 串的BF算法和KMP算法个人总结

    子串(模式串)的定位操作通常称作串的模式匹配 其中包含最初始的BF算法(Brute-Force)即简单匹配算法或者称作朴素的模式匹配算法,利用穷举法的思路 另一种就是改进后的KMP算法,还有对KMP算 ...

  7. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  8. KMP算法总结+Next数组+Nextval数组

    KMP算法是一种用于比较字符串匹配的算法,适用于在一个串中找另一个串是否存在,在这里如果不用字符串中的函数的话,一般能想到的第一种方法就是暴力,即从第一位开始比较. ①暴力方法 查找串:1 2 1 2 ...

  9. KMP算法,字符串匹配,next与nextval数组求解

    目录 KMP算法简介 next数组手动求解过程 next数组求解(代码实现) 改进的KMP算法 手动求解nextval数组 nextval数组求解(代码实现) KMP算法简介 KMP算法是一种改进的字 ...

最新文章

  1. P2737 [USACO4.1]麦香牛块Beef McNuggets 数学题 + 放缩思想
  2. DIV周边添加投影及背景固定
  3. 自定义notebook扩展插件_Notebook各种操作
  4. halcon算子之tuple_gen_const,用于生成特定长度的元组并且初始化其元素
  5. 移动web-触摸事件touch
  6. [20171220]toad plsql显示整形的bug.txt
  7. F - 上升子序列-超详细注释版
  8. nginx的location优先级
  9. Vue解决无数据图片闪现的问题
  10. java excel 导入试题
  11. 计算机组成原理平均cpi怎么算_计算机组成原理 第1--4章
  12. NOIp2010 机器翻译
  13. hulu dpp_如何取消您的Hulu订阅
  14. java 物体移动不了总结_java9迁移注意问题总结
  15. Java学习路线全过程(包含视频及图书资源)
  16. 历史总是在重演,AI寒冬或再来
  17. C语言——字符串+转义字符+注释
  18. ViKey加密狗对Word文档进行加密
  19. blackarch Linux(暗黑Linux)的下载与安装
  20. 一文读懂多元回归分析

热门文章

  1. 调度算法为何被阿里如此重视?
  2. 美术师关于自己的报酬与工作的看法
  3. 动效设计中的隐喻-1
  4. 皇室战争:暗夜女巫重做,去掉亡语机制后,她凉的可能会更快
  5. 非人哉恰饭的九月最美丽,只有啸天是菜鸡,上班睡觉太厉害了
  6. 入职体检——项目列表(11项)
  7. switch与if效率实例解析·5年以下编程经验必看【C#】
  8. python3.6.8下robot framework ride 测试环境搭建
  9. 23-Python3 File
  10. TCP/IP协议(二)tcp/ip基础知识