您的位置:首页 > 其它

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: