字串匹配演算法

2021-08-16 05:50:45 字數 1237 閱讀 7781

常見的字串匹配演算法有樸素字串匹配,kmp演算法,bm演算法等,對這三種演算法總結一下:

樸素字串匹配就是用兩層迴圈,分別對被匹配字串(string)和匹配模式(pattern)進行遍歷,時間複雜度是o((n-m+1)m),用python寫的**如下:

def

*****stringmatch

(string,pattern):

if len(string)return('error')

for i in range(len(string)-len(pattern)+1):

if pattern[0]==string[i]:

for j in range(1,len(pattern)):

if pattern[j]!=string[i+j]:

break

if j==len(pattern)-1:

print('matched position is %d'%i)

return('matched')

kmp演算法需要先對匹配模式字串進行處理,計算出乙個輔助函式,時間複雜度是o(n+m)。

def

prefixfunction

(pattern):

m=len(pattern)

aux=[0

for i in range(m)]

k=0for i in range(1,m):

while k>0

and pattern[k]!=pattern[i]:

k=aux[k-1]

if pattern[k]==pattern[i]:

k=k+1

aux[i]=k

return aux

defkmpmatch

(string,pattern):

n=len(string)

m=len(pattern)

aux=prefixfunction(pattern)

k=0for i in range(n):

while k>0

and pattern[k]!=string[i]:

k=aux[k-1]

if pattern[k]==string[i]:

k=k+1

if k==m:

print('matched position is %d'%(i-m+1))

k=aux[k-1]

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...