形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机
課程名:形式語言與自動機
作者:Lupinus_Linn
許可證:CC-BY-NC-SA 3.0 創作共用-署名-非商業性-相同方式共享
- 署名(英語:Attribution,BY):您(用戶)可以復制、發行、展覽、表演、放映、廣播或通過信息網絡傳播本作品;您必須按照作者或者許可人指定的方式對作品進行署名。
- 非商業性使用(英語:Noncommercial,NC):您可以自由復制、散布、展示及演出本作品;您不得為商業目的而使用本作品。
- 相同方式共享(英語:Sharealike,SA):您可以自由復制、散布、展示及演出本作品;若您改變、轉變或更改本作品,僅在遵守與本作品相同的許可條款下,您才能散布由本作品產生的派生作品。(參見copyleft。)
引用:
- 本文中部分文字與圖片引用自北京郵電大學計算機學院王柏教授的《形式語言與自動機》課程課件。
- 緒論中的證明方法部分引自清華大學王生原老師課件。
- 部分題目插圖引用自北京郵電大學出版社《形式語言與自動機 第二版》教材。
在此一并表示感謝,并不做商業用途。
本筆記所有內容的傳送門
Part.1緒論, Part.2 語言與文法
Part 3.有限自動機
Part.4 正則語言,2DFA,Mealy&Moore機
Part.5 上下文無關語言與下推自動機(PDA)
Part.6 圖靈機
文章目錄
- Part.4 正則語言
- 4.1 基本概念
- 4.2 右線性文法?正則表達式
- 4.3 正則語言可以表示為有限自動機、正則表達式和右線性文法
- 4.4 有限自動機→正則表達式:狀態消去法
- 4.5 正則表達式→有限自動機
- 4.6 右線性文法→有限自動機
- 4.7 有限自動機→右線性文法
- 4.8 DFA的最小化:填表算法
- 4.8.1 刪除不可達狀態
- 4.8.2 填表算法
- 4.8.3 等價狀態的合并
- 4.8.4 例子
- 4.9 正則語言的泵引理
- 4.10 雙向有限自動機(2DFA)
- 4.10.1 2DFA的五要素
- 4.10.2 2DFA的格局
- 4.10.3 2DFA接受的語言
- 4.11 有輸出的有限自動機(Mealy&Moore)
- 4.11.1 Mealy機
- 4.11.2 Moore機
- 4.11.3 Moore機→Mealy機
- 4.11.4 不做要求:Mealy機→Moore機
Part.4 正則語言
4.1 基本概念
- 正則語言:滿足正則語言的判定定理的語言。
- 正則(表達)式:用類似代數表達式的方法表示正則語言。
- 正則式的相等:表示的語言相同。
- 正則集:滿足正則式的字符串的集合。
- 正則式和語言的的聯合運算+,連接運算?,正閉包 L + L^+ L+,星閉包 L ? L^* L?及運算性質。
注1:正則集是T* 的子集。(即正則集是T*上的語言)
注2:L+包含ε當且僅當L包含ε。
注3:每個正則集至少對應一個正則式(可有無窮多 個正則式)
4.2 右線性文法?正則表達式
兩個等價
從右線性文法導出正則式:設 x → α x + β , α ∈ T ? , x ∈ N , t h e n x = α ? β x\rarr \alpha x+\beta,\alpha \in T^*,x\in N,then\ x=\alpha^*\beta x→αx+β,α∈T?,x∈N,then?x=α?β。不斷代入消元,最后得出 S = < R E > S= <RE> S=<RE>
4.3 正則語言可以表示為有限自動機、正則表達式和右線性文法
三者兩兩等價,都表示正則語言
生成終結符吃掉,并轉移到產生式的非終結符。直接生成終結符的非終結符是被接受的。 每個狀態名對應一個非終結符,轉移條件和轉移到的狀態構成產生式右側。
被接受的狀態額外還有僅產生終結符的產生式。最后做文法三消。 類似解方程,代入消元。 按照運算順序,將基本運算還原成文法。 狀態消去法。被消去的中間狀態對<射入,射出>的狀態對都有影響。 按照運輸按順序,將基本運算畫成自動機。 右線性文法 有限自動機 正則表達式
例子:
G=({S,A},{0,1},P ,S)其中P:S—>1A,A—> 0A |1S|0
文法轉正則式:解方程
A → 0 A ∣ 1 S ∣ 0 , 即 A → 0 A ∣ 11 A ∣ 0 , 解 得 A = ( 0 + 11 ) ? 0 , 得 S = 1 ( 0 + 11 ) ? 0 A\to 0A|1S|0,即A\to 0A|11A|0,解得A=(0+11)^*0,得S=1(0+11)^*0 A→0A∣1S∣0,即A→0A∣11A∣0,解得A=(0+11)?0,得S=1(0+11)?0
正則式轉文法:按照運算順序,按基本運算還原。
1 , ( 0 + 11 ) ? , 0 1,(0+11)^*,0 1,(0+11)?,0是依次連接的,對應文法的連接,則 S → 1 A 0 , A → ( 0 + 11 ) ? S\to 1A0,A\to (0+11)^* S→1A0,A→(0+11)?
閉包運算的文法是 A → a A ∣ ? A\to aA|\epsilon A→aA∣?,所以 A → 0 A ∣ 11 A ∣ ? A\to 0A|11A|\epsilon A→0A∣11A∣?
文法轉自動機:生成一個吃一個,生成終結符串的,轉移到一個新增的接受狀態。
因為mermaid語法的限制,用方形框表示接受。
S → 1 A S\to 1A S→1A,則狀態 q S q_S qS?用字符 1 1 1轉移到狀態 q A q_A qA?,其他以此類推。
A A A可以推出終結符串 0 0 0,則 q A q_A qA?通過 0 0 0轉移到新的接受狀態 q H q_H qH?
自動機轉文法:每一個轉移,對應一個產生式。轉移到接受狀態的,額外增加推出終結符串。
q S q_S qS?接受 1 1 1轉移到 q A q_A qA?,所以文法有產生式 q S → 1 q A q_S\to 1q_A qS?→1qA?,其他以此類推。
最后可能要做三消(消單消空消遞歸)。
q S → 1 q A q A → 1 q S q A → 0 q A q A → 0 q H ∣ 0 q_S\to 1q_A\\ q_A\to 1q_S\\ q_A\to 0q_A\\ q_A\to \bold{0q_H|0} qS?→1qA?qA?→1qS?qA?→0qA?qA?→0qH?∣0
自動機轉正則式:狀態消去法
要消去狀態 q A q_A qA?,入射 q A q_A qA?的有 { q S } \{q_S\} {qS?},出射 q A q_A qA?的有 { q H , q S } \{q_H,q_S\} {qH?,qS?},所以對 q S q_S qS?到 q H q_H qH?, q S q_S qS?到$q_S $有影響。
此時已經是基本結構,一舉寫出
S = ( 1 0 ? 1 ) ? 1 0 ? 0 S=(10^*1)^*10^*0 S=(10?1)?10?0
正則式轉自動機:按照運算順序,按基本運算還原。
用 S = 1 ( 0 + 11 ) ? 0 S=1(0+11)^*0 S=1(0+11)?0來還原,5.里那個比較復雜。
1 , ( 0 + 11 ) ? , 0 1,(0+11)^*,0 1,(0+11)?,0是依次連接的,對應自動機某一些狀態區域的空轉移。
空閉包的結構是,要么空轉移,要么在原地轉圈后轉移。
0+11的結構是,兩條并行線。
11結構是,順序執行。
4.4 有限自動機→正則表達式:狀態消去法
精髓:將正則表達式作為轉移弧的標記。不斷刪去狀態,刪去狀態時將其前驅和后繼的轉移弧標記修改。刪到基本結構時寫出最終表達式。
刪除方法:
基本結構:
對于 q ∈ F q\in F q∈F
為到達 q 0 q_0 q0?,可以在 q 0 q_0 q0?自環轉任意次或者 q 0 q_0 q0?和 q q q之間反復橫跳任意次。
之后要到達 q q q,一定會單獨經過一次 S S S,然后在 q q q又可以自環轉任意次。
技巧:刪去的順序不一定,可以先局部再整體。
例子:
- 另有狀態消去法的形式化方法– CONVERT(G),但其不適合手工操作,略去不表。
4.5 正則表達式→有限自動機
精髓:將正則表達式的匹配過程寫成一個二叉樹,然后中序遍歷,按照幾種基本結構將其畫成自動機。
其實大多數時候是隨手畫。
基礎:
歸納:
4.6 右線性文法→有限自動機
精髓:因為右線性文法每次會產生一個非終結符合一個終結符,將生成終結符作為自動機的轉移條件,產生的非終結符作為下一個狀態。
因為只產生終結符時應該是接受狀態,但是文法中沒有這個符號,所以就新建一個符號H,讓終結符指向H,H被接受。
為了不引入空轉移,根據是否能由S推出空串決定S的可接受性。
方法:設右線性文法 G = ( N , T , P , S ) G=(N,T,P,S) G=(N,T,P,S),構造一個與G等
價的有限自動機 N F A M = ( Q , T , δ , q 0 , F ) NFA\ M=(Q,T,δ,q_0,F) NFA?M=(Q,T,δ,q0?,F),其中: Q = N ∪ H Q=N \cup {H} Q=N∪H, H H H為一個新增加的狀態, H ? N H\notin N H∈/?N, q 0 = S q_0=S q0?=S.
F = { { H , S } , i f S → ? ∈ P { H } F=\begin{cases}\{H,S\},if\ S\rarr\epsilon \in P\\\{H\}\end{cases} F={{H,S},if?S→?∈P{H}?
δ : \delta: δ:
B ∈ δ ( A , a ) i f A → a B ∈ P H ∈ δ ( A , a ) i f A → a ∈ P δ ( H , a ) = ? B\in \delta(A,a)\ if\ A\rarr aB \in P\\H\in \delta(A,a)\ if\ A\rarr a \in P\\\delta(H,a)=\empty B∈δ(A,a)?if?A→aB∈PH∈δ(A,a)?if?A→a∈Pδ(H,a)=?
例子:
4.7 有限自動機→右線性文法
精髓:把 δ \delta δ函數的轉移看成是一個個生成式。
方法:設 N F A M = ( Q , T , δ , q 0 , F ) NFA\ M=(Q,T,δ,q_0,F) NFA?M=(Q,T,δ,q0?,F),構造一個右線性文法 G = ( N , T , P , S ) G=(N,T,P,S) G=(N,T,P,S),其中 N = Q N=Q N=Q, S = q 0 S=q_0 S=q0?
P : P: P:
A → a B ∈ P i f δ ( A , a ) = B , t h e n i f B ∈ F , a d d A → a t o P A\rarr aB\ \in P\ if\ \delta(A,a)=B,\ then\ if\ B\in F,\ add\ A\to a\ to\ P A→aB?∈P?if?δ(A,a)=B,?then?if?B∈F,?add?A→a?to?P
例子:
4.8 DFA的最小化:填表算法
- 最小化:對DFA M的極小化是找出一個狀態數比M少的
DFA M1,使滿足 L(M) = L(M1)。若DFA M不存在互為等價狀態及不可達狀態,則稱 DFA M是最小化的. - 狀態偶對:兩個狀態的有序二元組稱為狀態偶對。
- 狀態的等價和可區分:兩者是對立的。對于某一DFA M,如果兩個狀態 q 0 , q 1 q_0,q_1 q0?,q1?通過任意的串 ω \omega ω都可以轉移接收狀態(不一定是同一個接收狀態),則兩者等價。反之兩者可區分。
即:設 D F A M = ( Q , T , δ , q 0 , F ) DFA\ M = (Q,T,δ,q_0,F) DFA?M=(Q,T,δ,q0?,F),若 q x , q y ∈ Q q_x,q_y\in Q qx?,qy?∈Q,對于 ? ω ∈ T ? \forall \omega\in T^* ?ω∈T?,若 ( q x , ω ) ┣ ? ( q x , ? ) ? ( q y , ω ) ┣ ? ( q y , ? ) (q_x,\omega)┣^*(q_x,\epsilon)\leftrightarrow(q_y,\omega)┣^*(q_y,\epsilon) (qx?,ω)┣?(qx?,?)?(qy?,ω)┣?(qy?,?),則 q x , q y q_x,q_y qx?,qy?等價,反之兩者可區分。 - 不可達狀態:即無法從 q 0 q_0 q0?輸入任何字符串 ω \omega ω到達的狀態。
4.8.1 刪除不可達狀態
可以減小填表算法的負擔。
從 q 0 q_0 q0?開始,迭代尋找(bfs)可以到達的狀態 Q 可 達 Q_{可達} Q可達?,則 Q ? Q 可 達 Q-Q_{可達} Q?Q可達?即為不可達狀態,刪除不可達狀態即含有其的轉移條目。
4.8.2 填表算法
精髓:因為狀態的等價關系是傳遞的,可以通過兩兩判斷等價性來找出所有等價的狀態。又因為是自反的、對稱的,所以只需要一個 n × n n\times n n×n表格的下三角部分來記錄,且不需要對角線。
如果沒有理由認為兩個狀態是可區分的,那么就認為他們是等價的。
方法:
例子:
4.8.3 等價狀態的合并
將所有的狀態根據等價性構成一個劃分,將劃分塊用其等價類代替。
用等價類作為狀態標記構造一個新的DFA,其轉移關系為:如果原來不同劃分之間至少有一種轉移,那么這兩個等價類增加一條轉移。
即:設待最小化的DFA為 D F A A = ( Q , T , δ , q 0 , F ) DFA\ A = (Q, T, \delta, q_0 , F ) DFA?A=(Q,T,δ,q0?,F) ,最小化的自動機為 D F A B = ( Q B , T , δ B , [ q 0 ] , F B ) DFA\ B = (Q_B, T, \delta_B, [q0], F_B ) DFA?B=(QB?,T,δB?,[q0],FB?) , 其中 Q B = { [ q ] ∣ q ∈ Q } Q_B=\{ [q] | q\in Q\} QB?={[q]∣q∈Q}, δ B ( [ q ] , a ) = [ δ ( q , a ) ] } \delta_B([q] ,a)=[\delta(q,a)]\} δB?([q],a)=[δ(q,a)]}, F B = { [ q ] ∣ q ∈ F } F_B = \{ [q] | q\in F\} FB?={[q]∣q∈F}
4.8.4 例子
4.9 正則語言的泵引理
精髓:因為正則語言對應的是有限自動機,其狀態數是有限的,那么由Pigeonhole Rule,對于無限的語言(有限語言可以通過“并”構成正則語言),如果其為正則語言,那么一定會在自動機的某一段繞圈來達到無限。
泵引理:正則語言中足夠長的句子一定能拆成三段,并且中間一段重復0次或任意多次得到的句子仍然屬于正則語言(可以Pumping in和Pumping out)。泵引理成立是正則語言的一個必要條件。
用泵引理來證明某語言不是正則語言
證明步驟
例子:利用泵引理證明下述語言不是正則語言:
L = { 1 n 2 ∣ n ≥ 0 } L=\{1^{n^2}|n\ge 0\} L={1n2∣n≥0}
答:
例子:由文法 G G G產生的語言 L ( G ) L(G) L(G),其中 P : S → a S b S ∣ c P:S\to aSbS|c P:S→aSbS∣c.
語言的描述有很多種,用類似 a n b n a^nb^n anbn的公式化描述的只有一部分。還有用敘述性描述(比如a和b的數量一樣多)和文法描述的(本題)。這些描述有時候很難寫出完全等價的公式化描述,其實只需要其中的一個句子即可。
4.10 雙向有限自動機(2DFA)
雙向有限自動機:讀入一個字符之后,讀頭既可以左移一格, 也可以右移一格,或者不移動的有限自動機。
確定的雙向有限自動機: 每讀入一字符,必須向左或右移動,不考慮不移動的情況.
4.10.1 2DFA的五要素
2 D F A M = ( Q , T , δ , q 0 , F ) 2DFA\ M=(Q,T ,δ, q_0, F) 2DFA?M=(Q,T,δ,q0?,F)
δ : Q × T → Q × { L , R } \delta:Q\times T\rarr Q\times\{L,R\} δ:Q×T→Q×{L,R}
δ ( q , a ) = ( p , R ) o r δ ( q , a ) = ( p , L ) \delta(q,a)=(p,R)\ or\ \delta(q,a)=(p,L) δ(q,a)=(p,R)?or?δ(q,a)=(p,L)
其他與DFA相同。即每次除了狀態轉移之外還要移動讀頭(左移或右移一格)。
4.10.2 2DFA的格局
-
2DFA的格局和DFA的不同,要把字符串整個列出來。
-
δ ( q , a m + 1 ) = ( p , R ) δ(q,a_{m+1})=(p,R) δ(q,am+1?)=(p,R)的格局表示: a 1 a 2 … a m q a m + 1 … a n ┣ a 1 a 2 … a m + 1 p a + m + 2 … a n a_1 a_2…a_m q a_{m+1}…a_n┣ a_1 a_2…a_{m+1} p a+{m+2}…a_n a1?a2?…am?qam+1?…an?┣a1?a2?…am+1?pa+m+2…an?
-
δ ( q , a m + 1 ) = ( p , L ) δ(q,a_{m+1})=(p,L) δ(q,am+1?)=(p,L)的格局表示: a 1 a 2 … a m q a m + 1 … a n ┣ a 1 a 2 … a m ? 1 p a m a m + 1 … a n a_1 a_2…a_m q a_{m+1}…a_n┣ a_1 a_2…a_{m-1} p a_m a_{m+1}…a_n a1?a2?…am?qam+1?…an?┣a1?a2?…am?1?pam?am+1?…an?
4.10.3 2DFA接受的語言
- 2DFA接受的語言是 L ( M ) = { ω ∣ q ω ┣ ω ? q , q ∈ F } L(M)=\{ω| q_ω┣^*_ωq,q\in F\} L(M)={ω∣qω?┣ω??q,q∈F}
4.11 有輸出的有限自動機(Mealy&Moore)
有輸出的有限自動機是有限自動機的一個類型.
這類自動機在有字符輸入時,不僅存在狀態轉換, 同時引起字符輸出.
根據輸入字符,自動機狀態,輸出字符三者之 間關系,可有兩類有輸出的自動機:
米蘭機(Mealy): 輸出字符與輸入字符及狀態有關.
摩爾機(Moore): 輸出字符僅與狀態有關.
最大優點: 節省狀態
4.11.1 Mealy機
-
M = ( Q , T , R , δ , g , q 0 ) M=(Q,T ,R,δ, g , q_0) M=(Q,T,R,δ,g,q0?)
相比DFA,多了輸出函數 g : Q × T → R g:Q\times T\rarr R g:Q×T→R
δ \delta δ和 g g g函數共同描述Mealy機的工作情況。 -
繪圖:
a/b p q
{ δ ( p , a ) = q g ( p , a ) = b \begin{cases}\delta(p,a)=q\\g(p,a)=b\end{cases} {δ(p,a)=qg(p,a)=b?
繪制為 -
例子:
4.11.2 Moore機
-
M = ( Q , T , R , δ , g , q 0 ) M=(Q,T ,R,δ, g , q_0) M=(Q,T,R,δ,g,q0?)
相比DFA,多了轉移函數 g g g
相比Mealy機,Moore機的轉移函數 g g g是個一元函數,只與當前狀態有關。 -
繪圖:
a p,b1 q,b2
{ δ ( p , a ) = q g ( p ) = b 1 g ( q ) = b 2 \begin{cases}\delta(p,a)=q\\g(p)=b_1\\g(q)=b_2\end{cases} ??????δ(p,a)=qg(p)=b1?g(q)=b2??
繪制為因為輸出只與狀態有關,所以把輸出寫在狀態圈里。
-
例子:
4.11.3 Moore機→Mealy機
- Moore機比較簡單,所以轉換成Mealy機很方便。
- 將Moore機中某個狀態 q q q的輸出 b b b,作為新的Mealy機任何到達 q q q狀態的轉移時的輸出。
即:設摩爾機 M = ( Q , T , R , δ , g , q 0 ) M=(Q, T, R,δ, g ,q_0) M=(Q,T,R,δ,g,q0?) 米蘭機 M ’ = ( Q , T , R , δ , g ’ , q 0 ) M’=(Q, T, R,δ, g’, q_0) M’=(Q,T,R,δ,g’,q0?) 如果 中 中 中有 δ ( q , a ) = p δ(q,a)=p δ(q,a)=p,$ g§ = b$ 則 M ’ M’ M’中有 g ’ ( q , a ) = b = g ( δ ( q , a ) ) g’(q,a) = b = g(δ(q,a)) g’(q,a)=b=g(δ(q,a))
例子:
4.11.4 不做要求:Mealy機→Moore機
略去不表。
總結
以上是生活随笔為你收集整理的形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker之mongo数据库忘记用户名
- 下一篇: JixiPix Portrait Pai