利用有限自動機進行字串匹配

2021-07-06 09:31:59 字數 624 閱讀 2293

乙個有限自動機m是乙個5元組,(q,q0,f,m,g)q:狀態的集合,q0:開始狀態,f接收狀態,m字符集,g:轉換函式

文字字串t,匹配模式p[1,2,3...m],每乙個匹配模式都有乙個對應的有限自動機,將字串t按序輸入到自動機中,如果到達接受狀態,則匹配成功,下面介紹如何為p構造自動機。

1.狀態集合q為,開始狀態q0是0,接受狀態為m

2.對任意狀態q和字元a,轉換函式g為:g(q,a)=k(pq a),pq表示p[1]到p[q]的字串,其中函式k(x)是乙個從字母表(x)到的對映,該函式是找到:既是字串x的最長字尾,又是p的字首的串,k(x)表示串的長度

下面對p求轉換函式g的偽**:

m=length[p]

for q:0 to m

for a:字母表

n=min(m,q+1)

while(n>=0)

if pn是(pq.a)的字尾(pn與pq.a從後往前對比)

g(q,a)=n

else n--

字串t匹配自動機的過程的偽**:

n=length[t]

q=0for i:0 to n

q=g(q,t[i])

if q==m

匹配成功,輸出i-m

利用有限自動機進行字串匹配

字串匹配演算法有四種 1.樸素演算法,預處理o 0 匹配時間o n m 1 m 其中n是文字長度,m是模式長度 2.rabin karp演算法,預處理o m 匹配時間同樸素演算法 3.有限自動機演算法,預處理o m 匹配時間o n 4.kmp演算法,預處理o m 匹配時間o n 這裡討論的是有限自動...

字串匹配演算法 利用有限自動機進行匹配

本文內容與 演算法導論 中字串匹配章節相關並部分摘錄。常用的字串匹配演算法有樸素字串匹配演算法,rabin karp演算法,利用有限自動機進行字串匹配和kmp演算法等。前面兩種比較簡單,重點是後面兩種。利用有限自動機進行字串匹配 假設要對文字字串t進行掃瞄,找出模式p的所有出現位置。這個方法可以通過...

字串匹配 有限自動機

有限自動機包含乙個五元組 q,q0,a,q表示狀態有限集 q0為初始狀態 q0 q a表示接受狀態的集合 a 是q的子集 是輸入字母表 是狀態轉移函式 對於終態函式我還不是很理解,希望大家不吝賜教 演算法導論上有乙個例子 p ababaca 那麼轉換成五元組是 q q0 0 注 0狀態什麼都沒有 a...