字符串之KMP
没看明白时,觉得很难。 弄清楚后其实很简单。虽然说以前学了,但这么久不看了,这次再看时,花了好长时间。。。。一定要给记住了噢。
下面我只给出了代码的实现。如果想看详细的话。请移步:http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm 英文的。讲得很好
还有就是http://www.slyar.com/blog/kmp.html这位前辈的分析很好啊!他才比我大一届。但看了他的博客,很佩服他。向他看齐吧!
看不懂就自己去翻翻数据结构的数吧。
关键在于get_next:
//Preprocessing algorithm
void kmpPreprocess()
{
int i=0, j=-1;
b[i]=j;
while (i<m)
{
while (j>=0 && p[i]!=p[j]) j=b[j];
i++; j++;
b[i]=j;
}
}
和 kmpsearch:
void kmpSearch()
{
int i=0, j=0;
while (i<n)
{
while (j>=0 && t[i]!=p[j]) j=b[j];
i++; j++;
if (j==m)
{
report(i-j);
j=b[j];
}
}
}
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法