KMP算法问题

doran_zhu 2006-11-21 04:49:54
程序如下:
#include <string.h>
#include <stdlib.h>
#include<string.h>

#define MAXSIZE 20

void GetNext(const char *T,int *next)//求next数组
{
int i = 0,j = -1;
int T_len;
T_len = strlen(T);//模式串的长度
next[0] = -1;
while(i < T_len-1)
{
if(j == -1 || T[i] == T[j])
{
++i;
++j;
if(T[i] != T[j])
next[i] = j;
else
next[i] = next[j];
}
else
next[j] = j;
}
}

int Index_KMP(char *S,char *T,int pos)
{
int next[MAXSIZE];
GetNext(T,next);
int i = pos;//从pos开始匹配
int j = 0;
int S_len,T_len;
S_len = strlen(S);//目标串长度
T_len = strlen(T);//模式串的长度
while(i < S_len && j < T_len)
{
if(j == -1 || S[i] == T[j])
{
++i;
++j;
}
else
j = next[j];
}
if(j == T_len)
return i-T_len;
else
return -1;
}
void main()
{
char patt[MAXSIZE];
char des[1024];
puts("请输入模式串:");
gets(patt);
puts("请输入目标串:");
gets(des);
int pos = Index_KMP(des,patt,0);
printf("模式串在目标串的第%d个位置\n",pos);
}
当模式串的长度<=2时,程序能很好的运行,但当模式串的长度>=3时,就好像陷入了死循环一样,CPU使用率达100% 。
请高人指教
...全文
242 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhichao2008 2006-11-24
  • 打赏
  • 举报
回复
GetNext
else
next[j] = j;
==>
else
j = next[j];
doran_zhu 2006-11-24
  • 打赏
  • 举报
回复
已经搞定了,正如chenzhichao2008(陈智超)说的,的确是next[j] = j这条语句出了问题,解决这个问题后整个文学研究助手程序也就搞定了,多谢各位帮忙哦。
  • 打赏
  • 举报
回复
有问题的话,给我留言!我也希望好好学数据结构!呵呵~~~
doran_zhu 2006-11-22
  • 打赏
  • 举报
回复
我也是这学期才学数据结构,我是用KMP算法做一个文学研究助手程序的,做了两个下午都卡在那个函数上。我去试试lvronglee() 提供的算法,先谢谢了。
  • 打赏
  • 举报
回复
我用的VC++单步调试,与你写的int Index_KMP(char *S,char *T,int pos)
配合好象还是有点问题,在Index_KMP中还是死循环!
我初学数据结构,请多指教!!!!
  • 打赏
  • 举报
回复
用了数据结构上的例子模式串为"abaabcac"测试的next[]=01122312
(严蔚敏的书,P81面)
  • 打赏
  • 举报
回复
KMP算法好难哦,看好长时间没看懂,呵呵~~调试了一下,GetNext函数
好象有错误,我稍微改了一下,也在测试中。。。。。
void GetNext(const char *T,int *next)//求next数组
{
int i = 0,j = -1;//下标从0开始,-1表示主串都不匹配 主串++
int T_len;
T_len = strlen(T);//模式串的长度
next[0] = 0;
while(i < T_len-1)
{
if(j == -1 || T[i] == T[j])
{
++i;
++j;
next[i]=j+1;
}
if(T[i]!=T[j]) {j--;}
else
j=next[j];
}
}
测试了一个,好象对的。
LiChenYue 2006-11-21
  • 打赏
  • 举报
回复
怀疑出错的地方就printf
LiChenYue 2006-11-21
  • 打赏
  • 举报
回复
在程序中加入printf,调试看看!

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧