KMP演算法的python實現

2021-07-04 16:50:55 字數 933 閱讀 2519

理論部分可以參照這篇文章:字串匹配的kmp演算法

或者英文版的:jake boxer-the knuth-morris-pratt algorithm in my own words

下面根據以上的介紹,用python實現的kmp演算法(有不對的地方,還望指正)

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def getone(substr):

length = len(substr)

max = 0

j = length-1

for index in range(length-1):

if substr[:index+1] == substr[j:]:

max = max(max,index+1)

j -= 1

return max

def buildtable(substr):

length = len(substr)

table =

for index in range(length):

v = getone(substr[:index+1])

return table

def kmp(string,substr):

t = buildtable(substr)

j = 0

for i in range(len(string)):

if j>=len(substr):

return i-len(substr)

if string[i] == substr[j]:

j += 1

continue

if j>0:

nextp = j-t[j-1]

j = nextp

return -1

python的KMP演算法實現

演算法的複雜度為o n def matching kmp t,p,pnext kmp串匹配,主函式 j,i 0,0 n,m len t len p while j n and i m if i 1 or t j p i j,i j 1,i 1 else i pnext i if i m return...

KMP演算法(Python實現)

關於kmp演算法的原理等請參閱這篇文章 kmp演算法 c 實現 本篇文章只是對kmp用python進行了實現。1.時間複雜度分析 bf演算法的時間複雜度 在最壞的情況下,bf演算法要將目標串的每乙個字元同模式串進行比較一遍,假定目標串長度為m,模式串長度為n,總的時間複雜度為o m n 而對於kmp...

KMP演算法python實現

目錄 一 找出prefix table 二 kmp演算法實現 二 測試 三 結果 四 時間複雜度簡單匹配演算法的時間複雜度為o m n kmp匹配演算法時間複雜度為o m n 1 把要匹配的字串pattern拆成子串找出最大公共前字尾,原來的要匹配的字串列入為求最大公共前字尾的行列裡面。最大公共前字...