博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP算法之从next[]到nextVal[] (转)
阅读量:6830 次
发布时间:2019-06-26

本文共 805 字,大约阅读时间需要 2 分钟。

 前些日子写了一篇KMP算法的博文,,在这片文章中,谈到了一个模式串K值的记录数组

next[],详细可看那篇文章,其实,前面定义的next[]数组是有一定缺陷的,下面我面我将针对一种情况进行举例:

 

  如上图,如果按照之前的方法所获取的next[]数组的话,当两个字符串匹配到上图的情况是,将会出现如下图的情况:

  我们发现,从step1到step3所走的路都是浪费的,因为都是用同一个字母(a)和b去比,而这个计算机也是哼容易识别的,所以对于

next[]的改进是行的通的。

  究其原因,为什么我会说上面的3个步骤是白走的呢,以为这是三个连续的相等的a,因此我们可以从第一步直接跳到第四步,即:得到的数组next[j] = k,而模式串p[j] = p[k],当主串中的s[i] 和 p[j] 匹配失败时,不需要再和p[k]比较,而直接和p[next[k]]进行比较,当然可以一直迭代往前。

即:

 

代码如下:

void get_nextVal(SString T, int nextVal[]) {     int i = 1, j = 0; nextVal[1] = 0; while( i <= T[0]) { if(j == 0 || T[i] == T[j]) { j++; i++; if(nextVal[i] == nextVal[j]) { nextVal[i] = nextVal[j]; } else { nextVal[i] == j; } } else { j = nextVal[j]; } } }

注意,所求的永远是前一个的K(写给自己的)嘻嘻~~~~~~

use some of my own time, creativity, energy and talent to help people.
http://www.cnblogs.com/Frank-C/p/4909036.html
你可能感兴趣的文章
PHP FLUSH 函数 在IE11中 清除缓存的方法
查看>>
C Primer Plus (第五版) 第二章 编程练习
查看>>
利用fake 在豆瓣小组 (半)自动化回帖功能
查看>>
jqxfileupload+springmvc上传资源
查看>>
解决本地文件的词典翻译问题
查看>>
mongodb、3-基本的命令
查看>>
ubuntu pdf合并方法
查看>>
TCP网络编程流程
查看>>
linux基本命令grep egrep fgrep用法以及正则表达式
查看>>
MongoDB 数据库简单介绍(安装篇)
查看>>
近期工作感悟
查看>>
搞了半天原来是DOS换行符的问题^M
查看>>
PHP MYSQL数据库知识记录小知识点
查看>>
SSH连接速度慢
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
碎纸片中的我的大学
查看>>
StreamWriter写入文件
查看>>
CCR与DAG的区别
查看>>
freemarker@ # $使用方法的区别
查看>>