KMP算法的代码实现
2014-07-04 23:14
302 查看
上周算法班的BEN老师花了1个小时讲自动机和KMP的关系,结果failed...明天又要上课了,花了半天时间看了下KMP,暂且停留在利用next求模式中的跳跃长度,自动机那个还不能理解。。。
具体的可以百度阮一峰的KMP算法。
看着什么前缀后缀,突然想到上下文无关文法乔姆斯基范式了。。。。又想到了NFA和正则表达式的转换,是时候复习复习了。。
太晚了,直接上代码,明天继续看ML和统计学!加油!
输出结果
MacBook-Pro:Algorithm root# g++ kmpdemo2.cpp -o kmpdemo2
MacBook-Pro:Algorithm root# ./kmpdemo2
Pattern occurs with shift 13
-1 -1 -1 -1 0 1 -1 0 0 0
具体的可以百度阮一峰的KMP算法。
看着什么前缀后缀,突然想到上下文无关文法乔姆斯基范式了。。。。又想到了NFA和正则表达式的转换,是时候复习复习了。。
太晚了,直接上代码,明天继续看ML和统计学!加油!
#include <iostream> #include <string> #include <iterator>//输出 using namespace std; void Next(string str, int next[]){ //自己跟自己匹配 int length=str.size(); next[0]=-1; int j=-1; for(int i=1;i<length;i++){ while(j>-1 && str[j+1]!=str[i]) j=next[j]; if(str[j+1]==str[i]) j++; next[i]=j; } } void Match(string str1,string str2,int next[]){ Next(str2,next); int length1=str1.size(),length2=str2.size(); int j=-1; for(int i=0;i<length1;i++){ while(j>-1 && str2[j+1]!=str1[i]) j=next[j]; if(str2[j+1]==str1[i]) j++; if(j==length2-1){ cout<<"Pattern occurs with shift "<<i-length2+1<<endl; j=next[j]; } } } int main(){ string str1="bbcabcdababcdabcdabde"; string str2="abcdabd"; int next[20]; Match(str1,str2,next); copy(next,next+10,ostream_iterator<int>(cout," ")); cout<<endl; return 0; }
输出结果
MacBook-Pro:Algorithm root# g++ kmpdemo2.cpp -o kmpdemo2
MacBook-Pro:Algorithm root# ./kmpdemo2
Pattern occurs with shift 13
-1 -1 -1 -1 0 1 -1 0 0 0
相关文章推荐
- KMP算法实现字符串的模式匹配完整C代码
- KMP算法C代码实现
- 7、KMP算法实现--Java代码
- KMP算法代码实现
- KMP算法C 代码代码实现
- KMP算法的C语言代码实现
- KMP算法实现代码
- KMP算法与next数组的代码初步实现
- KMP算法中NEXT数组的作用以及代码实现
- KMP算法简介及代码实现
- KMP算法的代码实现二(用类)
- KMP算法的代码实现一
- KMP算法以及代码实现
- 经典KMP算法C++与Java实现代码
- KMP算法-代码实现
- kmp算法c++代码实现
- KMP算法的next、next value数组代码实现及POJ3461
- KMP算法代码实现和优化(不太能理解具体的过程和该算法思想)
- JAVA实现KMP算法理论和示例代码
- KMP算法的简单总结以及java代码实现