Grey Sheep 2022-04-07 08:33 采纳率: 0%
浏览 47

如何理解kmp的next数组

这里t是要查找的子串,m是t串的长度。请问下kmp算法中next数组的含义是什么,以及下面这段代码的求法是否正确。

void getNext()
{
    nxt[0] = 0;
    int j = 0, i = 1;
    while (i < m)
    {
        if (t[j] == t[i])
        {
            nxt[i] = ++j;
            i++;
        }
        else if (j == 0)
        {
            nxt[i] = 0;
            i++;
        }
        else
        {
            j = nxt[j - 1];
        }
    }
}
//KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)
  • 写回答

3条回答 默认 最新

报告相同问题?

问题事件

  • 创建了问题 4月7日