首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

串模式匹配的KMP算法的next[]算法如何理解

2012-02-17 
串模式匹配的KMP算法的next[]算法怎么理解书上是这样写的void get_next(SString T,int next[]){int i1ne

串模式匹配的KMP算法的next[]算法怎么理解
书上是这样写的
 void get_next(SString T,int next[])
{
  int i=1;
  next[1]=0;
  int j=0;
  while(i<T[0])
  {
  if(j==0 || T[i]==T[j])
  {
  ++i;
  ++j;
  next[i]=j;
  }
  else 
  j=next[j];
  } 
}
希望能给出点详细的解释,望各位大神们不吝赐教啊

[解决办法]
T[0]里存的是长度, 字符串实际存放在T[1,...,n]中。依次计算next[i]的值
假设已经计算了next[i]=j-1,这表示i的位置之前(不包括i)的j-1个字符和字符串开始的j-1个字符是匹配的,并且这个j是最大的。可以根据这个算next[i+1]的值:
1. 如果T[i]==T[j],表示继i之后继续匹配,那么next[i]=j; 显然这已是最大的
2. 否则,令j=next[j],(最难理解的地方!表示当前所能匹配的最长长度),回到1,直到1满足

热点排行