在KMP实现中计算下一个前缀索引

时间:2017-02-13 08:34:03

标签: algorithm knuth-morris-pratt

我已经阅读了许多不同的KMP实现,并且无法找出他们共享的一个方面。

当他们计算最长前缀时,也是后缀数组(lps)。 如果在特定迭代中测试的索引处的字符不匹配,并且前缀的索引不为0.前缀的索引设置为

  

index = lps [index - 1];

这是一个例子

void computeLPSArray(String pat, int M, int lps[])
{
    // length of the previous longest prefix suffix
    int len = 0;
    int i = 1;
    lps[0] = 0;  // lps[0] is always 0

    // the loop calculates lps[i] for i = 1 to M-1
    while (i < M)
    {
        if (pat.charAt(i) == pat.charAt(len))
        {
            len++;
            lps[i] = len;
            i++;
        }
        else  // (pat[i] != pat[len])
        {
            // This is tricky. Consider the example.
            // AAACAAAA and i = 7. The idea is similar 
            // to search step.
            if (len != 0)
            {
                len = lps[len-1];

                // Also, note that we do not increment
                // i here
            }
            else  // if (len == 0)
            {
                lps[i] = len;
                i++;
            }
        }
    }
}

是否存在 index = lps [index-1] 不等同于

的情况
  

指数 - ;

0 个答案:

没有答案