自動機


自動機類型:有限自動機(finite automata,FA),下推自動機(push-down automata, PDA),線性界限自動機(linear-bounded automata)和圖靈機(Turing machine)

有限自動機

確定性有限自動機

DFA(deterministic automata) M 是一個五元組

$M=(\Sigma, Q, \delta, q_0, F)$

其中,$\Sigma$是輸入符號的有窮集合,Q 是狀態的有限集合,$q_0 \in Q$是初始狀態,F 是終止狀態集合,$F \subseteq Q$,$\delta$ 是 $Q \times  \Sigma$ 到 Q(下一個狀態)的映射,也稱狀態轉移函數。

注:$Q \times \Sigma$表示兩個集合的直積,這里表示分別從兩個集合中取任意元素的組成的有序對,生成有序對的集合。

DFA M 接受的語言,記作T(M):

$T(M)=\lbrace x | \delta(q_0,x) \in F \rbrace$

其中,x 表示一個句子,且 $x \in \Sigma^*$,我們擴展轉移函數為,

$\hat {\delta}: Q \times \Sigma^* \rightarrow Q $

$\hat {\delta} (q, \epsilon) = q$

$\hat {\delta}(q, xa) = \hat {\delta}(\delta(q, a),x)$

其中$x' \rightarrow xa$為右線性正則文法產生式(應用到句子上的情況)

不確定性有限自動機

NFA(non-definite automata) M 是一個五元組

$M=(\Sigma, Q, \delta, q_0, F)$

其中,$\Sigma$是輸入符號的有窮集合,Q 是狀態的有限集合,$q_0 \in Q$是初始狀態,F 是終止狀態集合,$\delta$是直積$Q \times  \Sigma$ 到 Q的冪集的映射。集合的冪集是集合所有的子集(包括空集和自身)組成的集合,這個集合的元素個數為$2^{|Q|} = \sum_{i=0}^{|Q|} \binom {|Q|} {i}$

NFA與DFA不同的是,DFA 的$\delta(q,a)$是一個確定的狀態作為下一個狀態,而NFA的$\delta(q,a)$是一個集合,其中任一狀態都有可能作為下一狀態,

$\delta: Q \times \Sigma \rightarrow P(Q)$

我們擴展轉移函數如下,

$\hat {\delta}: Q \times \Sigma^* \rightarrow P(Q)$

$\hat {\delta}(q, \epsilon) = s$

$\hat{\delta}(q, xa) = \bigcup_{r \in \delta(q, a)} \hat{\delta}(r,x)$

NFA M 接受的語言為,

$T(M)=\lbrace x|p \in \delta(q_0, x), p \in F$

其中,x 表示一個句子

正則文法與FA

定理:若$G=(V_N, V_T, P, S)$表示一個正則文法,則存在一個$FA M = (\Sigma, Q, \delta, q_0, F)$,使得$T(M)=L(G)$

其中,$V_N$表示非終結符,$V_T$表示終結符

於是可以由給定正則文法構造FA M,步驟如下:

  1. 令$\Sigma = V_T, Q=V_N \cup {T}, q_0 = S$,其中 T 是新增的一個非終結符
  2. 如果P中存在產生式$S \rightarrow \epsilon$,則 $F=\lbrace S, T \rbrace$,否則$F=\lbrace T \rbrace$
  3. 如果P中存在產生式$B \rightarrow a, B \in V_N, a \in V_T$,則$T \in \delta(B, a)$
  4. 如果P中存在產生式$B \rightarrow aC, B, C \in V_N, a \in V_T$,則$C \in \delta(B, a)$
  5. 對於每個$a \in V_T$,有$\delta(T, a) = \varnothing$

 上面這個步驟給出的太突然,初看可能會不太容易理解。

我們從給出的正則文法出發,根據上篇文章的介紹,正則文法的規則是(為了與上面步驟相一致,以右線性正則文法為例)$A \rightarrow x|xB$,可見非終結符總是由一種或多種終結符的方冪連接而成,也就是說,非終結符是有終結符組成,所以正則文法所識別的句子最終都是由終結符組成,所以步驟(1)中,FA M的輸入符號集就是$\Sigma = V_T$,FA M的上個狀態在某一輸入符的條件下轉換到下一狀態,而這個輸入符正是文法中的終結符x,正好對應文法規則的產生式$A \rightarrow xB$,不難想到,這對應着FA M中狀態轉變,即狀態 A 轉換到 狀態 B,而A 和 B 是文法中的非終結符,所以FA M的狀態集合$Q = V_N$。不過,這樣就OK了嗎?顯然沒有,此時Q中的狀態全部是$V_N$中的非終結符,根據文法產生式,非終結符總是要繼續推導下去的,這說明,Q中少了能表示終止的狀態,否則就是要構造無限長度的句子了。我們新增一個非終結符T,這個非終結符T很特殊,它沒有產生式,它的具體意義稍后就會解釋。不過我們的Q 就完整了,於是$Q=V_N \cup {T} $。另外,FA M的起始狀態則不難理解為是文法的起始符$q_0=S$。

接着看步驟3、4和5

右線性正則文法的產生式有:$B \rightarrow a, B \in V_N, a \in V_T$,表示一個非空終止符B 產生出一個終止符a,這個產生式的右端沒有非終結符,根據這種產生式,對應於FA M則是由狀態B 接收一個輸入符a 后進入下一個狀態,這個狀態就是前面新引入的那個T,即,但凡應用了$B \rightarrow a$這種右端沒有非終結符的產生式,FA M就進入下一個狀態T,由狀態B並接收一個輸入符a進入下一個狀態T,如果是NFA,則是下一個狀態集合,這里為了不失一般性,我們考慮NFA(畢竟DFA是NFA的特例),即$\delta(B, a)$是下一個狀態集合,那么如果經過產生式$B \rightarrow a$變換后,,FA M進入狀態T,則 $T \in \delta(B, a)$。

根據右線性正則文法,如果有產生式:$B \rightarrow aC, B, C \in V_N, a \in V_T$,那么根據上面的闡述,應該知道應用了此產生式后,FA M進入下一個狀態C,且$C \in \delta(B, a)$。當然如果還有產生式$B \rightarrow aD$,那么$D \in \delta(B, a)$;如果B 只有一個產生式$B \rightarrow a$,那么$\delta(B, a)$只有一個元素,$\delta (B, a) = \lbrace T \rbrace$

前面提到過,新引入的非終結符T沒有產生式,沒有$T \rightarrow a|aA$這樣的產生式,所以$\delta(T, a) = \varnothing$

然后來看步驟2,

FA M的終止狀態集合$F \subseteq Q$,顯然集合Q里面只有狀態T 可以作為終止狀態,即應用了文法產生式$B \rightarrow a$之后進入狀態T,所以$F = \lbrace T \rbrace$。前面我們介紹文法時,沒有引入$\epsilon$,現在將其引入,這樣就可以產生“空句子”,如果$S \rightarrow \epsilon$,即產生一個 空句子 ,那么顯然,使用起始狀態 S 作為此時的終止狀態,所以,如果有產生式$S \rightarrow \epsilon$,此時$F=\lbrace S, T \rbrace$,而 $S \in V_N$,此時依然能保證$F \subseteq Q$,當然如果沒有產生式$S \rightarrow \epsilon$,那么$F = \lbrace T \rbrace$,即只有非空句子的終止狀態T

定理:若$M=(\Sigma, Q, \delta, q_0, F)$是一個有限自動機,則存在一個正則文法$G=(V_N, V_T,P,S)$,使得$L(G)=T(M)$

由FA M構造G的步驟:

  1. 令$V_N=Q$,$V_T = \Sigma$,$S=q_0$。根據前面的說明,這里應該不難理解
  2. 如果$C \in \delta(B, a), B, C \in Q, a \in \Sigma$,則在P中存在產生式:$B \rightarrow aC$。根據前面的說明,反過來就得到這條步驟
  3. 如果$C \in \delta(B, a), C \in F$,則P中存在產生式$B \rightarrow a$。根據前面的說明,這里C 就是T

上下文無關文法與下推自動機

 下推自動機(Pushdown Automata, PDA)用於實現上下文無關文法(CFG)。PDA 可以表達成一個七元組:

$M=(\Sigma, Q, \Gamma, \delta, q_0, Z_0, F)$

$Q$: 狀態的有限集合

$\Sigma$: 輸入符號集

$\Gamma$: 棧符號表

$\delta$: 轉移函數

$q_0$: 初始狀態

$Z_0$: 初始棧頂符號(也有叫棧底符號的,因為初始時棧里僅有這一個符號)

$F$: 終止狀態集或可接受狀態集,$F \subseteq Q$

$$ \begin{aligned} \delta : & \quad \quad Q & \quad \times   \quad \quad \Sigma \quad \times &   \quad  \Gamma \quad \Rightarrow \quad & Q \quad \times \quad & \Gamma^* \\ & \text{old state} & \text{input symb.} & \text{stack top} & \text{new state(s)} & \text{new stack top(s)} \end{aligned}$$

$\delta (q,a,X) = \lbrace (p, Y), ...$

從狀態q 轉移到狀態 p,a是下一個輸入符號,X是當前棧頂符號,Y是下一個用於替換X的棧頂符號,如下圖所示,$Y \in \Gamma^*$,

(圖來源網上)

  • 如果$Y = \epsilon$,直接將X從棧頂彈出
  • 如果$Y=X$,棧頂符號不變還是X
  • 如果$Y=Z_{1}Z_{2}...Z_{k}$,將X從棧頂彈出,然后將Y壓入棧,按從右往左的順序壓入棧,此時$Z_1$位於棧頂

PDA類似NFA,比NFA多了一個stack,正是這個stack使得PDA可以識別一些非正則的語言。輸入符號集與棧符號集可能會不同,所以分別用$\Sigma$和$\Gamma$表示。

圖靈機

略(以后再專門講述,主要是內容跟書上太過重復了,但是自己又不會組織語言,所以只能先等等)。

ref

統計自然語言處理,宗成輕


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM