从头到尾彻底理解KMP
来源:互联网 发布:国外聊天软件 编辑:程序博客网 时间:2024/06/06 16:57
优化KMP算法
对KMP算法已经有了认识, 下面让我们使用KMP算法,来了解KMP的匹配流程。
例子:源文本串S为 "abacababc",模式串P为 "abab"。
next数组表如下:
若当前程序已经匹配到如下所示的地方。根据next数组,能够判断下一次将进行s[3]与p[1]的比较,这一结果必然失败。为什么会存在这样的问题呢???
abacababc
abab
以上问题出现的原因是,p[j]==p[next[j]] 且 p[j]!=s[i],所以,必定有 p[next[j]]!=s[i]。因此,问了解决上面的问题,我们应该对next数组进行优化,以避免 p[j] == p[next[j]]的情况出现。
优化next数组
原则:
在原next数组的计算规则之上,增加新的规则。即当 p[j] == p[next[j]]时,则把next[j]的值再次递归。代码如下:
void GetGoodNext(char []p, int []next){ int pLen = p.length; next[0] = -1; int k = -1; int j = 0; while(j < pLen-1){ if(k==-1 || p[k]==p[j]){ ++j; ++k; //以下4行为修改部分 if(p[j] != p[k]) next[j] = k;//原next数组的过程 else next[j] = next[k]; }else{ k = next[k]; } }}
阅读全文
0 0
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 从头到尾彻底理解KMP
- 串的模式匹配-KMP算法
- python Excel追加数据
- osi参考模型七个层次及功能
- GBDT算法整理
- 如何在网页里嵌入PPT
- 从头到尾彻底理解KMP
- 通过table实现板块的自由组合
- 逻辑思维和编程的关系
- Java中的常量与变量
- 递归---整数数组元素A[0]~A[i]中的最小值
- Smoothing and normal estimation based on polynomial reconstruction
- Python与机器学习之数据可视化(四)
- Statement和PreparedStatement之间的区别(自学时遇到的问题)
- 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?