我最近学习了kmp字符串匹配算法,我几乎得到了所有的知识。但我没有得到的是如何在o(模式的长度)中建立失效函数。我不需要代码,我需要一个明确的解释,如果可能的话提前谢谢!

最佳答案

this site
kmp算法通过计算故障函数f来预处理模式p,该故障函数f使用先前执行的比较来指示最大可能的移位s。
具体地说,失效函数f(j)被定义为P的最长前缀的长度,该前缀是P[i]的后缀.j]。
这是构造的伪代码,我想你可以在网站上得到解释的细节

        KNUTH-MORRIS-PRATT FAILURE (P)

            Input:    Pattern with m characters
            Output: Failure function f for P[i . . j]

            i ← 1
            j ← 0
            f(0) ← 0
            while i < m do    /// your complexity will be O(length of pattern)
                if P[j] = P[i]
                    f(i) ← j +1
                     i ← i +1
                      j← j + 1
                else if (j != 0)
                     j ← f(j - 1)
                else
                    f(i) ← 0
                    i ← i +1

希望它能回答你的问题

关于string - KMP的故障功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6594072/

10-13 05:23