KMP算法理解
2018-01-09 15:34
288 查看
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/1/9 14:33
# @Author : zhm
# @File : kmp.py
# @Software: PyCharm
def get_next(str):
next = [0]*len(str)
k = 0
for q in xrange(1, len(str)):
while k>0 and str[k] != str[q]:
k = next[k-1]
if str[k] == str[q]:
k += 1
next[q] = k
return next
def kmp(tar, src):
next = get_next(tar)
print next
q = 0
for i in xrange(0, len(src)):
while q>0 and tar[q] != src[i]:
q = next[q - 1]
if tar[q] == src[i]:
q += 1
if q == len(tar):
q = 0
print 'found:', i - len(tar) +1
kmp('aba', 'dsabafasabadw')求解next数组复杂度:O(m),kmp查找复杂度:O(n)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/1/9 14:33
# @Author : zhm
# @File : kmp.py
# @Software: PyCharm
def get_next(str):
next = [0]*len(str)
k = 0
for q in xrange(1, len(str)):
while k>0 and str[k] != str[q]:
k = next[k-1]
if str[k] == str[q]:
k += 1
next[q] = k
return next
def kmp(tar, src):
next = get_next(tar)
print next
q = 0
for i in xrange(0, len(src)):
while q>0 and tar[q] != src[i]:
q = next[q - 1]
if tar[q] == src[i]:
q += 1
if q == len(tar):
q = 0
print 'found:', i - len(tar) +1
kmp('aba', 'dsabafasabadw')求解next数组复杂度:O(m),kmp查找复杂度:O(n)
相关文章推荐
- Kmp算法的比较好理解的博文···
- 理解KMP算法
- 通俗理解KMP算法
- KMP算法---理解
- KMP算法的理解
- KMP算法代码实现和优化(不太能理解具体的过程和该算法思想)
- 字符串匹配——KMP算法中的next数组理解
- 从DFA角度理解KMP算法
- 从头到尾彻底理解KMP算法
- 我所理解的KMP算法
- KMP之一:从头到尾彻底理解KMP算法(2014年8月1日版)
- kmp算法的理解与实现
- KMP算法理解
- KMP算法的个人理解
- KMP算法最浅显理解——一看就明白
- 字符串匹配的KMP算法彻底理解
- 字符串匹配:KMP算法, Boyer-Moore算法理解与总结
- 理解KMP算法
- Kmp算法; 建立在有限自动机理解基础上; 思想相当简单了;
- 关于KMP算法理解(快速字符串匹配)