c语言算法分析看不懂怎么办,KMP算法 完全看不懂唉,该怎么处理

KMP算法 完全看不懂唉

虽然按算法书上的算法把代码写出来了  但是无法理解 也不知道怎么记忆这个写法哎

有谁能推荐下记住这个算法的写法的方法么

#include 

#include 

int kmp_table(const unsigned char * W,int len,int* T)

{

if(!W||!T) return 1;

int pos=2,cnd=0;

T[0]=-1,T[1]=0;

while( pos

if( W[pos-1]==W[cnd] ){

cnd=cnd+1,T[pos]=cnd,pos=pos+1;

}

else if( cnd>0 ){ cnd=T[cnd]; }

else{ T[pos]=0;pos=pos+1; }

}

return 0;

}

int kmp_search(const unsigned char * S,const unsigned char * W,int sLen,int wLen)

{

int m=0,i=0;

int *T=(int*)malloc(wLen*sizeof(int));

kmp_table( W,wLen,T);

while( m + i 

if( W[i] == S[m+i] ){

if( i==wLen-1 ) { free(T);return m; }

i++;

}

else{

if( T[i] > -1 ) { m=m+i-T[i], i=T[i]; }

else{ i=0, m++;  }

}

}

free(T);

return sLen;

}

int main()

{

int n=kmp_search( (const unsigned char *)"bcaaaaa",(const unsigned char *)"aaa",5,3);

printf("%d\n",n);

return 0;

}

------解决思路----------------------

求子串的Next数组

void getNext(char *str, int *next)

{

assert(str != NULL && next != NULL);

int size = strlen(str);

if(size == 0)

return;

int i = 0;

int k = -1;

next[0] = -1;

while(i 

{

if(k == -1

------解决思路----------------------

str[i] == str[k])

{

i++;

k++;

if(str[i] == str[k])

{

next[i] = next[k];

}

else

{

next[i] = k;

}

}

else

{

k = next[k];

}

}

}

------解决思路----------------------

http://blog.csdn.net/yutianzuijin/article/details/11954939

这个建议楼主仔细看看   说的还是比较清楚的

------解决思路----------------------

静下心好好分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值