The fool 2015-11-04 02:27 采纳率: 0%
浏览 2621
已结题

KMP算法的next函数怎么理解?

理解KMP关键在于理解next表,有些疑问需要各位帮忙,
网上资料(july的,阮一峰的)和书上(严书)资料已经看过, 希望网友能针对我的迷惑给些指点。

图片说明

这里我有3个疑问:
1) 怎么理解求取next[j+1]的过程,是模式串自己和自己匹配的过程。 我觉得这个好像是那么回事,但又感觉和一般的主串子串匹配不太一样,怎么理解自己和自己匹配?
2)在求取上图中case2时,为什么第一次Pj和P[next[k]]比,而不是其他的数呢? 如果Pj和P[next[k]]相等了,为什么就说next[j+1] = next[k]+1?

3) 如果Pj和P[next[k]]不相等了,为什么下次比较的是Pj和P[next[next[k]]]相比,为什么使用这样一个递推的过程来求解next[j+1]?

恕我愚钝,还请帮忙,给出针对以上问题的解释。
奖励如果不满意,可追加。谢谢!

  • 写回答

2条回答 默认 最新

  • Robot-S 2015-11-04 02:56
    关注

           首先先贴出KMP算法的框架代码,这段代码使用C语言当中的字符串数据结构,因此字符串当中第一个字符的下标为零。int Index(const char * str1,const char * str2,int pos){    int * nextFunc = get_next(str2);    int strLen = strlen(str1);    int subLen......
    答案就在这里:关于KMP算法当中的next函数
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料