字串匹配 有限自動機

2021-06-14 16:48:24 字數 1164 閱讀 7230

有限自動機包含乙個五元組(q, q0, a, ∑, δ)

q表示狀態有限集

q0為初始狀態(q0 ∈q)

a表示接受狀態的集合(a 是q的子集)

∑是輸入字母表

δ是狀態轉移函式

*對於終態函式我還不是很理解,希望大家不吝賜教

演算法導論上有乙個例子

p = ababaca

那麼轉換成五元組是

q =

q0 = 0:(注:0狀態什麼都沒有)

a =

∑ = δ

我們可以畫乙個狀態變換圖

狀態     | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

a  | 1 | 1 | 3 | 1 | 5 | 1 | 7 | 1

輸入 b  | 0 | 2 | 0 | 4 | 0 | 4 | 0 | 2

c  | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0

這個狀態轉換表告訴我們

0狀態輸入乙個a變成1狀態

1狀態輸入乙個a還是1狀態(即aa中第二個a任然處於1狀態),輸入乙個b在進入2狀態(此時序列為ab)

2狀態輸入乙個a進入3狀態(此時序列為aba),輸入乙個b進入0狀態(此時序列為abb,不符合狀態3,並且最後乙個字母為b,也不符合狀態1)

以此類推

也就是說對於任意乙個字串,我們只要知道其模式串的狀態轉換圖,也就可以通過當前狀態和輸入確定下一狀態,也就是說我們可以知道有多少個字元符合模式字首,那麼我們僅遍歷一遍字串,則可以找出匹配的模式串

例如 t[i] = a  b  a  b  a  b  a  c  a  b  a

狀態     0  1  2  3  4  5  4  5  6  7

2  3

那麼有限自動機的關鍵就是計算模式串的狀態轉移函式(在此之前,需要先計算模式串的輸入字母表)

compute_transition_function(p, ∑)

m <- lenght[p]

for q <- 0 to m

do for each character a ∈ ∑

do k <- min( m+1, q+2)

repeat k <- k-1

until pk

δ(q, a) <- k

return δ

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

乙個有限自動機m是乙個5元組,q,q0,f,m,g q 狀態的集合,q0 開始狀態,f接收狀態,m字符集,g 轉換函式 文字字串t,匹配模式p 1,2,3.m 每乙個匹配模式都有乙個對應的有限自動機,將字串t按序輸入到自動機中,如果到達接受狀態,則匹配成功,下面介紹如何為p構造自動機。1.狀態集合q...

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

字串匹配演算法有四種 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 這裡討論的是有限自動...

基於有限狀態自動機的字串匹配

1 應用場景及相關概念 有線狀態自動機在許多不同的領域有著廣泛的應用。如電子工程,語言學,電腦科學,哲學,生物學,邏輯學和數學。有限狀態機是在自動化理論和計算機理論中研究的一類自動機。在電腦科學中,有線狀態機被廣泛用於建模應用的行為,硬體電路系統設計,軟體工程,編譯器,網路協議,計算與語言的研究等。...