KMP算法 next与nextval的求解
来源:互联网 发布:靠网络赚钱 编辑:程序博客网 时间:2024/05/22 12:04
KMP算法是由Knuth,Morris,Pratt共同提出的模式匹配算法,对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。KMP算法对于朴素匹配算法的改进是引入了一个跳转表next[]。
next的求解:第一位的next值为0,第二位的next值为1。模式中第j个字符之前前后相等的最大真子串长度加1。
函数实现:
void get_next(SString T,int next[])
{//求模式串T的next函数值并存入数组next
i=1;next[1]=0;j=0;
while(i<T.length)
{
if(j==0||T.ch[i]==T.ch[j])
{
++i;++j;next[i]=j;
}
else j=next[j];
}
}
nextval的求解:第一位的nextval值为0,第二位如果与第一位相同则为0,不同则为1。
第j位与next[j]位进行比较,不同则为next[j];相同则与第next[j]位next值相同。
函数实现:
void get_nextval(SString T,int nextval[])
{//求模式串T的next修正函数值并存入数组nextval
i=1;nextval[1]=0;j=0;
while(i<T.length)
{
if(j==0||T.ch[i]==T.ch[j])
{
++i;++j;
if(T.ch[i]!=T.ch[j]) nextval[i]=j;
else nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
样例:
j12345678模式串abaabcacnext01122312
- KMP算法 next与nextval的求解
- KMP算法中next和nextval数组的求解
- KMP模式匹配算法中next和nextval的求解
- KMP模式匹配算法中next和nextval的求解
- 手动计算KMP算法的Next数组与NextVal数组
- KMP中的next和nextval的算法
- KMP模式匹配算法中next和nextval数组的快速求解
- KMP模式匹配算法中next和nextval的求解(转)
- KMP算法 next nextval求值
- KMP算法next & nextval探讨
- KMP算法next数组与nextval数组建立
- KMP算法中next和nextval数组的计算方法
- KMP算法(求模式串的next及nextval值)
- 详解又详解KMP中的next和nextval的算法
- KMP模式匹配算法中next,nextval的分别实现
- KMP算法中next数组、nextval数组的手工计算
- KMP算法之Next和Nextval详解
- 初探KMP算法之next/nextval
- 【Nginx】利用nginx搭建集群环境
- python3 ZIP文件密码破解
- Ubuntu禁用触摸板
- 线性表综合实验之间接寻址
- 双向循环链表实现大数四则运算
- KMP算法 next与nextval的求解
- JavaScript实现存款利息计算器
- Map集合
- 全局指针的定义
- scala的intersect的一种应用场景
- 让sourceinsight支持查看makefile、kconfig以及.s代码的方法
- 快速排序
- 【面向JS--apply、call、bind】
- Linux—shell—nohup命令使用(weblogic启动命令)nohup sh run.sh