手动计算KMP算法的Next数组与NextVal数组
来源:互联网 发布:三星智能电视直播软件 编辑:程序博客网 时间:2024/05/01 21:19
原文:http://www.slyar.com/blog/kmp-next-nextval.html
KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧。
计算前缀 Next[i] 的值:
我们令 next[0] = -1 。从 next[1] 开始,每求一个字符的 next 值,就看它前面是否有一个最长的"字符串"和从第一个字符开始的"字符串"相等(需要注意的是,这2个"字符串"不能是同一个"字符串")。如果一个都没有,这个字符的 next 值就是0;如果有,就看它有多长,这个字符的 next 值就是它的长度。
计算修正后的 Nextval[i] 值:
我们令 nextval[0] = -1。从 nextval[1] 开始,如果某位(字符)与它 next 值指向的位(字符)相同,则该位的 nextval 值就是指向位的 nextval 值(nextval[i] = nextval[ next[i] ]);如果不同,则该位的 nextval 值就是它自己的 next 值(nextvalue[i] = next[i])。
举个例子:
计算前缀 Next[i] 的值:
next[0] = -1;定值。
next[1] = 0;s[1]前面没有重复子串。
next[2] = 0;s[2]前面没有重复子串。
next[3] = 0;s[3]前面没有重复子串。
next[4] = 1;s[4]前面有重复子串s[0] = 'a'和s[3] = 'a'。
next[5] = 2;s[5]前面有重复子串s[01] = 'ab'和s[34] = 'ab'。
next[6] = 3;s[6]前面有重复子串s[012] = 'abc'和s[345] = 'abc'。
next[7] = 4;s[7]前面有重复子串s[0123] = 'abca'和s[3456] = 'abca'。
计算修正后的 Nextval[i] 值:
nextval[0] = -1;定值。
nextval[1] = 0;s[1] != s[0],nextval[1] = next[1] = 0。
nextval[2] = 0;s[2] != s[0],nextval[2] = next[2] = 0。
nextval[3] = -1;s[3] == s[0],nextval[3] = nextval[0] = -1。
nextval[4] = 0;s[4] == s[1],nextval[4] = nextval[1] = 0。
nextval[5] = 0;s[5] == s[2],nextval[5] = nextval[2] = 0。
nextval[6] = -1;s[6] == s[3],nextval[6] = nextval[3] = -1。
nextval[7] = 4;s[7] != s[4],nextval[7] = next[7] = 4。
- 手动计算KMP算法的Next数组与NextVal数组
- KMP算法中next数组、nextval数组的手工计算
- KMP算法next数组与nextval数组建立
- 应付考试用的KMP算法中next数组及nextval数组的计算(笑)
- 计算KMP模式匹配算法中next数组的代码分析及改进型KMP算法中nextval数组代码分析
- KMP算法中next和nextval数组的计算方法
- KMP算法中next和nextval数组的求解
- KMP算法 next与nextval的求解
- KMP算法求next数组和nextval数组
- 计算精确串匹配算法KMP中的next和nextVal数组值
- KMP算法中特征值数组next的计算与使用
- KMP算法中Next数组及改进后的nextval数组的求法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法中next数组和nextval数组值的推导
- KMP算法的next数组计算原理
- 如何获得电脑的名称
- shell的一些笔记
- android应用程序目录的使用
- 计算机视觉和机器学习领域中顶级会议的重要性
- PIC18F45K80单片机串口调试总结
- 手动计算KMP算法的Next数组与NextVal数组
- Android视频播放器mediaplayer
- java基础笔记
- Java中的异常(1)
- ZOJ 3886 Nico number(线段树)
- 如何拉伸有透明区域的png图片来做UIButton的背景图片
- poll&&epoll实现分析(二)——epoll实现
- poj 1823 Hotel(线段树·区间更新·lazy tag)
- 32位机和64位机编程时应该注意些什么