Algorithm 如何计算Knuth-Morris-Pratt算法中的下一个部分表?

Algorithm 如何计算Knuth-Morris-Pratt算法中的下一个部分表?,algorithm,pattern-matching,Algorithm,Pattern Matching,当我试着自己去理解KMP时,我遇到了一些困惑。我参考了很多网上资源和教科书,但我的谜题仍然存在,请帮助我。您可以从中获得有关此算法的一些背景信息 第一种情况很简单: 第二种情况很难理解: 我的问题: 1) 如何理解,在第二种情况下,找到合适的k'是一个模式匹配本身的过程(这意味着p[1..j]匹配p[1..x])?它看起来像是匹配本身,但不像通常的文本和模式匹配 2) 为什么在第二种情况下,第一个元素选择与p[j]比较是p[next[k]],而不是其他元素?如果它们匹配,那么为什么next[

当我试着自己去理解KMP时,我遇到了一些困惑。我参考了很多网上资源和教科书,但我的谜题仍然存在,请帮助我。您可以从中获得有关此算法的一些背景信息

第一种情况很简单:

第二种情况很难理解:

我的问题:

1) 如何理解,在第二种情况下,找到合适的k'是一个模式匹配本身的过程(这意味着p[1..j]匹配p[1..x])?它看起来像是匹配本身,但不像通常的文本和模式匹配

2) 为什么在第二种情况下,第一个元素选择与p[j]比较是p[next[k]],而不是其他元素?如果它们匹配,那么为什么next[j+1]=next[k]+1

3) 如果第一个p[next[k]]不等于p[j],那么为什么我们必须选择下一个元素p[next[k]]与p[j]进行比较,并继续这个过程,直到我们找到合适的k'或我们找不到?这是一个递归过程,如何理解它?

您可以观看视频了解KMP。