求解KMP算法及next值
来源:互联网 发布:oa软件开发公司 编辑:程序博客网 时间:2024/06/05 11:47
求解KMP算法及next值
KMP算法的关键是理解和求出 next[i] 值。有如下两串,S为母串、P为子串;
↓i
s(1)……s(i-j+1)…s(i-j+k-1) …s(i-k+1) … s(i-1) s (i)
p(1)… p(k-1) … p(j-k+1) … p(j-1) p(j)
↑j
其中s(i) != p(j) 但有如下序列匹配:s(i-j+1)……s(i-1) = p(1) ……p(j-1)p(j)
当子串自身中存在p(1)p(2)…p(k-1) = p(j-k+1)p(j-k+2)…p (j-1)
也就是说 p(1)p(2)…p(k-1) = s(i-k+1)……s(i-1)
以一个事例解释下:
比如字符串:abaabaaa
a next[1] = 0
ab next[2] = 1
aba next[3] = 1
abaa next[4] = 2
abaab next[5] = 2
abaaba next[6] = 3
abaabaa next[7] = 4
abaabaaa next[8] = 5
咋求next值呢?这里再详细叙述下,拿上面的最后一个为例。因为你要求next[8],所以我们只看前七位。看看他们的匹配过程(自身模式串的匹配)
abaabaa a(不匹配字符用红色标出,最后的字符不看)
abaaba不匹配
abaab不匹配
abaa 匹配
aba
ab
a 匹配(但他不是最大的字符匹配)
注意:其实从第4个开始就不用在匹配了,为了说明期间我还是写出来了。希望有助于理解。
于是自身中存在一个四字符的子序列与自身匹配,所以他的next[8]值为4+1=5
下面是next值的函数(注意是改进算法,之间将程序最里程的if..else语句修改下,就是普通的next函数了),可以打印出结果看是不是和你笔算的一样 ^⊥^
↓i
s
p
↑j
其中s(i) != p(j) 但有如下序列匹配:
当子串自身中存在
也就是说 p
以一个事例解释下:
比如字符串:abaabaaa
a next[1] = 0
ab next[2] = 1
aba next[3] = 1
abaa next[4] = 2
abaab next[5] = 2
abaaba next[6] = 3
abaabaa next[7] = 4
abaabaaa next[8] = 5
咋求next值呢?这里再详细叙述下,拿上面的最后一个为例。因为你要求next[8],所以我们只看前七位。看看他们的匹配过程(自身模式串的匹配)
aba
a
aba
ab
ab
a 匹配(但他不是最大的字符匹配
注意:其实从第4个开始就不用在匹配了,为了说明期间我还是写出来了。希望有助于理解。
于是自身中存在一个四字符的子序列与自身匹配,所以他的next[8]值为4+1=5
下面是next值的函数(注意是改进算法,之间将程序最里程的if..else语句修改下,就是普通的next函数了),可以打印出结果看是不是和你笔算的一样 ^⊥^
- 求解KMP算法及next值
- kmp算法求解next值
- KMP算法及Next数组求解方法
- KMP算法next值的求解
- KMP算法,next数组求解
- 模式匹配 KMP算法中Next值求解
- KMP算法中的next数组求解
- python求解next数组实现KMP算法
- KMP算法 next与nextval的求解
- KMP算法及next数组
- kmp next 数组代码 及 kmp 算法
- 【KMP】多种KMP算法next数组的求解
- C语言-字符串匹配-KMP算法及next数组求解和运用实例
- KMP中求解next值的模板
- KMP算法中的next数组的两种算法求解
- KMP算法(求模式串的next及nextval值)
- KMP算法的next函数求解和分析过程
- KMP算法中next和nextval数组的求解
- 焦点滚动图片
- 今天见到了袁鸣和当当网的俞渝
- 采用p6spy完整显示hibernate的SQL语句
- 计算字符的组合量并一一列举出来(java,算法探讨)
- 设置网页背景图片平铺方式 background-repeat 属性
- 求解KMP算法及next值
- WEB程序员学习JS快速指南--基础一
- SRC的RPM包安装方法
- AdvancedArray2.java
- C /C 笔试题-C/C 笔试、面试题目大汇总
- 两首才流传开的2008童谣,看了鼻子酸酸,请珍惜生活_赵老猫—环保居士的BLOG_新浪博客
- 关于C++中的类型转换
- 公司台湾主站的url重写
- 从硬盘安装Windows XP和Ubuntu双系统