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