C++数据结构之字符串的KMP算法
2014-10-14 21:08
405 查看
我的前一篇博客写的是有关BF算法的分析,但其效率比较低下,因为它是要每次不匹配的话,就要将子字符串从头开始与主字符串的下一个位置进行匹配对照,其实根据子字符串(也称之为目标字符串)的特点,就可以减去一些没必要的匹配,从而产生了KMP算法,从而引出了著名的next数组,它是用来存储在某个位置不匹配时目标字符串应该从哪个位置开始进行匹配,其基本算法如下:
上述代码是获得next[]数组的实现方法
void get_next(string T, int *next) { int j=0;//j此处表示某位置处的前缀 int i=1;//i此处表示某位置处的后缀 next[0]=1; while(i<next[0]) { if(0==j||T[i]==T[j]) { i++; j++; next[i]=j; } else j=next[j];//此处我的理解是j是根据前面的匹配过程进行T中不同元素的遍历,分析与T[i]是否相等 } }
上述代码是获得next[]数组的实现方法
int index_KMP(string S,string T,int pos) { int i =pos; int j=1; int next[255]; while(i<=S[0]&&j<=T[0]||0==j) { if(S[i]==T[j]) { i++; j++; } else j=next[j]; } if(j>T[0]) return i-T[0]; else return 0; }上面是KMP方法的实现
相关文章推荐
- C++数据结构之字符串的BF算法
- 字符串-KMP算法实现(数据结构基础 第4周)
- 数据结构——KMP算法C++版
- 数据结构之 字符串---字符串匹配(kmp算法)
- C++ 数据结构之kmp算法中的求Next()函数的算法
- Java数据结构之字符串模式匹配算法---KMP算法
- C++容器&数据结构
- 数据结构之顺序表C++实现
- 数据结构——关于KMP算法的效率分析
- C++数据结构——堆,二叉搜索树及Huffman编码输出
- C++ 与 C#数据结构类型对应关系表
- 最近学习C++ 数据结构 尝试代码就放上来吧 初学者适用
- 数据结构之单链表 C++ 实现
- c++指针学习笔记--交换两个字符串数据收藏
- 数据结构(C++)中C++常用语法
- 数据结构——KMP算法
- Flex 和C++ 之间传输结构体数据--用XML传输
- C++中实现通用数据结构
- c++指针学习笔记--交换两个字符串数据
- (摘)面向对象c++数据结构之基本数据结构-链表-使用链表管理器(连载中)