python的KMP演算法實現

2021-08-07 15:04:30 字數 758 閱讀 1052

##演算法的複雜度為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 j-i

return -1

##演算法複雜度為o(m)

def gen_pnext(p):

'''生成針對p中各位置i的下一檢查位置表,用於kmp演算法'''

i, k, m = 0, -1, len(p)

pnext = [-1 for i in range(m)]

while i < m-1:

if k == -1 or p[i] == p[k]:

i, k = i+1, k+1

if p[i] == p[k]:

pnext[i] = pnext[k]

else:

pnext[i] = k

else:

k = pnext[k]

return pnext

總的演算法複雜度為o(m+n),但是因為一般情況下匹配字串的長度遠遠小於目標字串,所以說,總的複雜度認為是o(n)。

KMP演算法的python實現

理論部分可以參照這篇文章 字串匹配的kmp演算法 或者英文版的 jake boxer the knuth morris pratt algorithm in my own words 下面根據以上的介紹,用python實現的kmp演算法 有不對的地方,還望指正 usr bin env python ...

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拆成子串找出最大公共前字尾,原來的要匹配的字串列入為求最大公共前字尾的行列裡面。最大公共前字...