KMP算法的实现

来源:互联网 发布:数据库完整性管理实验 编辑:程序博客网 时间:2024/05/06 08:15

 

 

今天又把KMP算法看了一边,虽然以前读过相关的代码,并且知道它里面的一些基本思想概念:如状态机、前缀串等,但一直没有认真体会,今天不同之处在于自己把相应的算法写出来,于是九牛二虎,写完以上代码。

 

在构造状态转移函数时,即这里的NEXT[]数组,最重要的一步是:

while( count>0 && p[num]!=p[count] ) count = next[count-1];

看上去两行代码,其实背后包含许多,如count本质是记录匹配的最长前缀长度,而next[count-1],p[count]再加一个while循环,实则是寻找一个更短的前缀。

 

在进行具体的字符串查找函数中,我自己写了int KMP(char* text_,char* pattern,int* next);比较好理解匹配的思想。

不过看完书上的代码后,惊叹与它的简洁,于是重写了int KMP_(const char* text,const char* pattern,const int* next);

代码精炼多了,不过理解起来确实也要费点时间。

 

有空把代码在重写几遍,加强理解。

原创粉丝点击