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