如何详细解释KMP算法及其在Python中的具体实现方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计830个文字,预计阅读时间需要4分钟。
算法思想+Knuth-Morris-Pratt(KMP)算法是解决字符串匹配问题的经典算法,以下通过一个例子来演示:
给定字符串BBCABCDABCDABDE,检查其中是否包含另一个字符串ABCDABD。
1. 从头开始BBCABCDABCDABDE中查找ABCDABD。
算法思路
Knuth-Morris-Pratt(KMP)算法是解决字符串匹配问题的经典算法,下面通过一个例子来演示一下:
给定字符串"BBC ABCDAB ABCDABCDABDE",检查里面是否包含另一个字符串"ABCDABD"。
1.从头开始依次匹配字符,如果不匹配就跳到下一个字符
2.直到发现匹配字符,然后经过一个内循环严查字符串是否匹配
3.发现最后一个D不匹配,下面就该思考应该把字符串向右移动多少个位置呢?传统做法可能是移动一格,KMP算法就创新在这里。KMP算法通过查询一个Partial Match Table(表内存有字符串信息),然后计算出需要移动的步数,这个表后面会介绍怎么来的。
这里我们看到D前面是B,查表得到第二个B对应的是2,所以 移动数 = 已匹配字符数 - 查表所得数 也就是 6 - 2 = 4, 需要向右移动四格。
下面也是重复这个步骤
直到发现匹配或者字符长度超出(未发现匹配)。
本文共计830个文字,预计阅读时间需要4分钟。
算法思想+Knuth-Morris-Pratt(KMP)算法是解决字符串匹配问题的经典算法,以下通过一个例子来演示:
给定字符串BBCABCDABCDABDE,检查其中是否包含另一个字符串ABCDABD。
1. 从头开始BBCABCDABCDABDE中查找ABCDABD。
算法思路
Knuth-Morris-Pratt(KMP)算法是解决字符串匹配问题的经典算法,下面通过一个例子来演示一下:
给定字符串"BBC ABCDAB ABCDABCDABDE",检查里面是否包含另一个字符串"ABCDABD"。
1.从头开始依次匹配字符,如果不匹配就跳到下一个字符
2.直到发现匹配字符,然后经过一个内循环严查字符串是否匹配
3.发现最后一个D不匹配,下面就该思考应该把字符串向右移动多少个位置呢?传统做法可能是移动一格,KMP算法就创新在这里。KMP算法通过查询一个Partial Match Table(表内存有字符串信息),然后计算出需要移动的步数,这个表后面会介绍怎么来的。
这里我们看到D前面是B,查表得到第二个B对应的是2,所以 移动数 = 已匹配字符数 - 查表所得数 也就是 6 - 2 = 4, 需要向右移动四格。
下面也是重复这个步骤
直到发现匹配或者字符长度超出(未发现匹配)。

