KMP算法中改进的nextval数组
来源:互联网 发布:河北三金网络 编辑:程序博客网 时间:2024/06/05 11:12
我们在上篇文章中讲到的NEXT数组其实再某些情况下是有缺陷的,例如在模式串 s=’aaaab’ 和主串 t=’aaabaaaab’匹配时,当在i=4,j=4时,产生失配,由下图的next数组中指出还需进行 i=4,j=3;i=4,j=2;i=4,j=1这三次比较。但是我们发现这样的比较是没有意义的,因为s串中前四个字符都相等,所以不需要逐个与主串中的第4个字符进行比较。
所以此时我们应该考虑直接进行i=5,j=1的比较,这就是说,在我们求出next[j]=k时,而模式串中s[j]=s[k],则当匹配字符s[i]和t[j]比较不等时,不需要再进行s[k]和t[j]的比较,而是直接和s[next[k]]比较,换句话说就是如果存在s[j]=s[k]那么next[j]=next[k]。
在模式串中第一位固定有nextval[1]=0,第二位的next[2]应该为1,但是s[1]=s[2],所以我们取nextval[2]=nextval[1]=0,以此类推。
下面给出求nextval的算法:
void get_nextval(SString T,int nextval[]){ i=1; nextval[1]=0; j=0; while(i<T[0]){ if(j==0||T[i]==T[j]){ ++i;++j; if(T[i]!=T[k]) nextval[i]=j; else nextval[i]=nextval[j]; } else j=nextval[j]; }}
0 0
- KMP算法中改进的nextval数组
- KMP算法中Next数组及改进后的nextval数组的求法
- KMP算法中nextval数组的计算方法
- KMP算法中next数组、nextval数组的手工计算
- KMP算法中next和nextval数组的计算方法
- KMP算法中nextval数组的计算方法收藏
- KMP算法中next和nextval数组的求解
- KMP算法中nextval的计算方法!
- KMP算法----利用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和nextval的算法
- struts2简单入门示例
- XML解析方法总结(无代码)
- jsp中EL表达式的内的11个对象
- 优化TableViewCell高度计算的问题
- Apache Maven项目提供的Archetype插件详解
- KMP算法中改进的nextval数组
- linux进程的一生形象比喻
- 快速开平方根算法
- Java发送HTTP请求
- 【Android framework】am命令启动Activity流程
- 杨氏矩阵查找
- Parcelable encountered IOException writing serializable 问题解决
- linux文件安全与权限
- Java锁----Synchronized实现原理