| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:请教一KMP算法的问题
只看楼主 加入收藏
leon57
Rank: 1
来 自:xznu
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-7-19
收藏
 问题点数:0 回复次数:4 
请教一KMP算法的问题
int Index_KMP(HString &S,HString &T,int pos)
{
    i=pos;
    j=1;
    while(i<=S.len&&j<=T.len)
    {
        if(S.ch[i]==T.ch[j])
        {
            ++i;
            ++j;
        }
        else j=next[j];
    }
    if(j>T.len) return i-T.len;
    else return 0;
}

里面的next[j]怎么编写?
搜索更多相关主题的帖子: KMP 算法 
2008-10-25 21:42
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
baidu一下,很多的...
最好还是看书吧,没理解过程是没用的.

i like linux...
2008-10-26 00:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
先理解一下next【】数组是干嘛的使的吧。
基本上和上面的差不多。

倚天照海花无数,流水高山心自知。
2008-10-26 12:23
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
kmp算法基本思想:在进行原始匹配前对要寻找的字符串进行自我匹配记录下每一位的RETURN位置,然后正式匹配的时候如果有深入匹配失败的情况,不是完全退回,而是按照return位置数组中指示的位置返回。所以能大大降低时间复杂度。
我的理解。
2008-10-26 12:45
ynuwdw
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-31
收藏
得分:0 
kmp算法
在KMP算法中,子串或者模式串的next函数只与子串或者模式串自身有关,


//取得模式串的next函数值的算法如下
voie get_next(char t[],int next[])
  {    //s[0]与t[0]分别存贮s和t的长度
int i=1;
next[1]=0;
j=0;
while(i<t[0])
     {
     if(j==0 || t[i]==t[j])
        {
        i++;
        j++;
        next[i]=j;
        }
     else
       {
       j=next[j];
        }
     }
  }

//kmp算法如下
int kmp(char s[],char t[])
{    //s[0]与t[0]分别存贮s和t的长度
int i,j;
i=j=1;
while(i<=s[0]-t[0]+1 && j<=t[0])
     {
      if(j==0 || s[i]==t[j])
        {
           i++;
           j++;
        }
      else
        {
        j=next[j];
        }
     }
if(j>t[0])
   return i-t[0];//或者 return i-j+1;
}
2008-10-31 19:52
快速回复:请教一KMP算法的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016069 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved