美文网首页
KMP字符匹配搜索算法

KMP字符匹配搜索算法

作者: Poisson_Lee | 来源:发表于2020-02-13 15:24 被阅读0次

转载https://www.cnblogs.com/dragondragon/p/11327845.html

自我总结:
KMP算法的本质并不复杂,其思想是:将pattern与同样字符长度的text滑动窗口的字符串从左至右比较是否匹配,如果text窗口字符串与pattern字符串在匹配过程中存在部分匹配,则可以利用这个部分匹配的字符串的性质(这个部分匹配的字符串 显然也是pattern字符串的子字符串),利用这个子字符串的信息(在预处理阶段做好查找表),决定比对窗口下次往右滑动的距离(不用像暴力比对方式每次只能往右移动一个字符的距离)。

所以利用的是pattern字符串的 从左至右的子字符串的 性质。
这个子字符串对应比较匹配过程中的部分匹配的字符串,然后寻找这个子字符串的前缀后缀中的公共元素的最大值。

例子如下:

如果给定的模式串 Pattern 是:"ABCDABD";从左至右,其各个子串的前缀后缀分别如下表格所示: image.png

如果给定文本串S=“BBC ABCDAB ABCDABCDABDE”,和模式串P=“ABCDABD”,现在要拿模式串去跟文本串匹配。

image

(1). 因为模式串中的字符A跟文本串中的字符B、B、C、空格一开始就不匹配,所以
直接将模式串不断的右移一位即可,直到模式串中的字符A跟文本串的第5个字符A匹配成功;

image

(2). 继续往后匹配(continue to match!),当模式串(P="ABCDABD")最后一个字符D跟文本串匹配时失配,显而易见,模式串需要向右移动。

但向右移动多少位呢?

因为

(2).1:此时已经匹配的字符数为6个(ABCDAB),

(2).2:然后根据《最大长度表》可得失配字符D的上一位字符B对应的( 还并不是next数组哦!是到B这儿的相同前缀后缀的最大长度!)长度值为2,

(2).3:需要向右移动6 - 2 = 4 位。

image

(3). 模式串向右移动4位后,发现C处再度失配,

(3).1:此时已经匹配了2个字符(AB),

(3).2:上一位字符B对应的最大长度值为0,

(3).3:向右移动:2-0=2位.

image

(4) A与空格失配,向右移动1 位。

image

(5)继续比较,发现D与C 失配,

(5).1:已匹配的字符数6

(5).2:上一位字符B对应的最大长度2,

(5).3:故向右移动的位数为:已匹配的字符数6减去上一位字符B对应的最大长度2,即向右移动6 - 2 = 4 位。

image

(6): 经历第5步后,发现匹配成功,过程结束。

通过上述匹配过程可以看出,问题的关键就是寻找模式串中最大长度的相同前缀和后缀。

相关文章

  • KMP字符匹配搜索算法

    转载https://www.cnblogs.com/dragondragon/p/11327845.html 自我...

  • KMP字符串匹配

    KMP字符串匹配

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 09--KMP

    [toc] KMP算法原理 KMP思想 假设字符串abcdefgab和模式串abcdex,进行匹配,当匹配到x位置...

  • KMP

    KMP有什么用 KMP主要应用在字符串匹配上。 KMP的主要思想是「当出现字符串不匹配时,可以知道一部分之前已经匹...

  • 常见算法题之字符串

    1、KMP算法 参考:july大神的KMP博客细节不摆,该算法由暴力字符串来匹配,具体是由字符串匹配的暴力写法而来...

  • KMP算法的JS实现

    talk is cheap,show me the code: 参考链接: 阮一峰-字符串匹配的KMP算法[KMP...

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • 字符串匹配与KMP算法

    1.朴素字符串匹配算法 2.KMP算法 求前缀函数 实现KMP算法 3.测试代码

  • KMP算法(字符串匹配问题)

    一、是什么? 注意,是KMP算法,不是MMP哈,我没有骂人。KMP算法是用来做字符串匹配的,除了KMP算法分,还有...

网友评论

      本文标题:KMP字符匹配搜索算法

      本文链接:https://www.haomeiwen.com/subject/xcikfhtx.html