KMP算法小析
来源:互联网 发布:ipad下载东西软件 编辑:程序博客网 时间:2024/06/06 07:36
对于串的模式匹配算法,相信学data structure的都不会很陌生,不过当我们看到各种书上对算法KMP的讲解时,我们会有种不知所云的感觉就算有的C++的算法实现,和例子的讲解,当换成另外一个串时,我们将无从下手,其中对NEXT的求解,更让我们痛苦。在这里Sinpoal将自己对这个算法的看法记录下来,在谈及KMP之,我先谈谈另外一种串的模式匹配算法(朴素的模式匹配)
eg :
object[i] : q w e r t y u
subobject[j] : t y u
在上面写出的两个字符串中我们用朴素的模式匹配来查找 subobject[j] 这个字符串, 首先定义两个int 型数: int i=0;int j=0;
object[i]==?subobject[j] beacusei=0; j=0;。q!=t; and now excute i++;
object[i]==?subobject[j] beacusei=1; j=0;。w!=t; and now excute i++;
object[i]==?subobject[j] beacusei=2; j=0;。e!=t; and now excute i++;
object[i]==?subobject[j] beacusei=3; j=0;。r!=t; and now excute i++;
object[i]==?subobject[j] beacusei=4; j=0;。t==t; and now excute i++&&j++
object[i]==?subobject[j] beacusei=5 j=1;。y==y; and now excute i++&&j++
object[i]==?subobject[j] beacusei=6; j=2;。u==u; and now excute i++&&j++
此时查找结束。
接下来我们看KMP算法。 在这里我给出NEXT的算法:
1)next[0]= -1 意义:任何串的第一个字符的模式值规定为-1。
(2)next[j]= -1 意义:模式串T中下标为j的字符,如果与首字符
相同,且j的前面的1—k个字符与开头的1—k
个字符不等(或者相等但T[k]==T[j])(1≤k<j)。
如:T=”abeabead” 则 next[6]=-1,因T[3]=T[6]
(3)next[j]=k 意义:模式串T中下标为j的字符,如果j的前面k个
字符与开头的k个字符相等,且T[j] != T[k] (1≤k<j)。
即T[0]T[1]T[2]。。。T[k-1]==T[j-k]T[j-k+1]T[j-k+…T[j-1]
且T[j] != T[k].(1≤k<j);
(4) next[j]=0 意义:除(1)(2)(3)的其他情况。
- KMP算法小析
- 小算法--KMP
- KMP算法小解析
- KMP算法小总结
- 小谈KMP算法
- hdu 1358 kmp小算法
- 小白算法学习 KMP
- 【小算法】KMP字符串匹配算法实现
- KMP算法简析
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- 我做的第一个线程池,十分简单
- 20100315-001项目管理PM E学习
- 解决OM的Price List输入找不到对应库存的ITEMS的问题
- ACE历史与简评(zz)
- vs2008快捷键
- KMP算法小析
- 浮点数的精度和转换
- 一种基于邮件协议的聊天工具
- 一个基于socket的资源共享平台的实现(二)
- 服务器列表SQL
- 更高效率的A^B mod C
- 网页导航菜单被Flash和播放器等对象挡住的解决办法
- 请问怎么获取积分
- window对象的学习(四)