KMP算法的nextval[] 即优化next[]
针对于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[]相关推荐
- KMP算法 → 计算nextval数组
[算法解析] ● 众所周知,KMP算法中模式串T的next数组,是KMP算法的核心. next数组的核心作用是"当模式串T的第j位与主串S的第pos位失配时(即 T[j]≠S[pos] 时) ...
- 串的模式匹配、KMP算法、nextval数组求法
一.暴力匹配 #include <iostream> using namespace std; #define MAXLEN 255 typedef struct{char ch[MAXL ...
- 模式匹配算法----KMP算法以及next数组的解法
KMP算法:求字符串匹配(也叫模式匹配)的算法,即给定一个字符串,求其某一子串在其中出现的位置. 普通模式匹配 例如:给定字符串为abcabaaabaabcac,求其子串abaabcac在其中出现的位 ...
- 数据结构 4 字符匹配-KMP算法
第四章主要介绍的是串,但是串的实现没什么必要,最重要的知识点在于KMP算法的使用,大二时数据结构总结过一次KMP算法,大二时总结的比较细致,链接如下: https://blog.csdn.net/we ...
- KMP算法(多种实现方式)
KMP算法核心思想 利用已经匹配的数据,去除无效的从头匹配 KMP算法流程 首先我们找到 i=9,j=9时不匹配,如果时暴力算法,此时i应重新来到i=2的位置,j返回j=1的位置,开始新一轮的匹配 这 ...
- 串的BF算法和KMP算法个人总结
子串(模式串)的定位操作通常称作串的模式匹配 其中包含最初始的BF算法(Brute-Force)即简单匹配算法或者称作朴素的模式匹配算法,利用穷举法的思路 另一种就是改进后的KMP算法,还有对KMP算 ...
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- KMP算法总结+Next数组+Nextval数组
KMP算法是一种用于比较字符串匹配的算法,适用于在一个串中找另一个串是否存在,在这里如果不用字符串中的函数的话,一般能想到的第一种方法就是暴力,即从第一位开始比较. ①暴力方法 查找串:1 2 1 2 ...
- KMP算法,字符串匹配,next与nextval数组求解
目录 KMP算法简介 next数组手动求解过程 next数组求解(代码实现) 改进的KMP算法 手动求解nextval数组 nextval数组求解(代码实现) KMP算法简介 KMP算法是一种改进的字 ...
最新文章
- P2737 [USACO4.1]麦香牛块Beef McNuggets 数学题 + 放缩思想
- DIV周边添加投影及背景固定
- 自定义notebook扩展插件_Notebook各种操作
- halcon算子之tuple_gen_const,用于生成特定长度的元组并且初始化其元素
- 移动web-触摸事件touch
- [20171220]toad plsql显示整形的bug.txt
- F - 上升子序列-超详细注释版
- nginx的location优先级
- Vue解决无数据图片闪现的问题
- java excel 导入试题
- 计算机组成原理平均cpi怎么算_计算机组成原理 第1--4章
- NOIp2010 机器翻译
- hulu dpp_如何取消您的Hulu订阅
- java 物体移动不了总结_java9迁移注意问题总结
- Java学习路线全过程(包含视频及图书资源)
- 历史总是在重演,AI寒冬或再来
- C语言——字符串+转义字符+注释
- ViKey加密狗对Word文档进行加密
- blackarch Linux(暗黑Linux)的下载与安装
- 一文读懂多元回归分析