Knuth-Morris-Pratt算法(简称KMP)是最常用的字符串匹配算法之一。
算法简介
如下算法解释主要来源于这里,但是通常很难阅读完全,我推荐你直接进入下一节 图例解释部分。
我们来观察一下朴素的字符串匹配算法的操作过程。如下图(a)中所描述,在模式 P = ababaca 和文本 T 的匹配过程中,模板的一个特定位移 s,q = 5 个字符已经匹配成功,但模式 P 的第 6 个字符不能与相应的文本字符匹配。
KMP算法通过模式预处理避免无效位移,提高字符串匹配效率。利用部分匹配表(π)记录模式串的最长前后缀长度,减少重复比较。在字符不匹配时,移动模式串的位数等于已匹配字符数减去对应部分匹配值。预处理阶段空间复杂度为O(m),匹配阶段字符比较次数最多为2n-1。
Knuth-Morris-Pratt算法(简称KMP)是最常用的字符串匹配算法之一。
如下算法解释主要来源于这里,但是通常很难阅读完全,我推荐你直接进入下一节 图例解释部分。
我们来观察一下朴素的字符串匹配算法的操作过程。如下图(a)中所描述,在模式 P = ababaca 和文本 T 的匹配过程中,模板的一个特定位移 s,q = 5 个字符已经匹配成功,但模式 P 的第 6 个字符不能与相应的文本字符匹配。
3968
345
388

被折叠的 条评论
为什么被折叠?