形式語言與自動機 Part.4 正則語言,2DFA,Mealy&Moore機

課程名:形式語言與自動機

作者: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 基本概念

  • 正則語言:滿足正則語言的判定定理的語言。
  • 正則(表達)式:用類似代數表達式的方法表示正則語言。
  • 正則式的相等:表示的語言相同。
  • 正則集:滿足正則式的字符串的集合。
  • 正則式和語言的的聯合運算+,連接運算•,正閉包L+L^+,星閉包LL^*及運算性質。

注1:正則集是T* 的子集。(即正則集是T*上的語言)
注2:L+包含ε當且僅當L包含ε。
注3:每個正則集至少對應一個正則式(可有無窮多 個正則式)

4.2 右線性文法↔正則表達式

兩個等價

  1. 左線性文法和右線性文法等價。
  2. 右線性文法和正則式等價(右線性文法產生的語言都是正則語言,正則語言都可以用右線性文法產生)
    從右線性文法導出正則式:設xαx+β,αT,xN,then x=αβx\rarr \alpha x+\beta,\alpha \in T^*,x\in N,then\ x=\alpha^*\beta。不斷代入消元,最後得出S=<RE>S= <RE>

4.3 正則語言可以表示爲有限自動機、正則表達式和右線性文法

三者兩兩等價,都表示正則語言

生成終結符喫掉,並轉移到產生式的非終結符。

直接生成終結符的非終結符是被接受的。
每個狀態名對應一個非終結符,轉移條件和轉移到的狀態構成產生式右側。

被接受的狀態額外還有僅產生終結符的產生式。最後做文法三消。
類似解方程,代入消元。
按照運算順序,將基本運算還原成文法。
狀態消去法。被消去的中間狀態對<射入,射出>的狀態對都有影響。
按照運輸按順序,將基本運算畫成自動機。
右線性文法
有限自動機
正則表達式

例子

G=({S,A},{0,1},P ,S)其中P:S—>1A,A—> 0A |1S|0

  1. 文法轉正則式:解方程
    A0A1S0,A0A11A0A=(0+11)0S=1(0+11)0A\to 0A|1S|0,即A\to 0A|11A|0,解得A=(0+11)^*0,得S=1(0+11)^*0

  2. 正則式轉文法:按照運算順序,按基本運算還原。
    1,(0+11),01,(0+11)^*,0是依次連接的,對應文法的連接,則S1A0,A(0+11)S\to 1A0,A\to (0+11)^*
    閉包運算的文法是AaAϵA\to aA|\epsilon,所以A0A11AϵA\to 0A|11A|\epsilon

  3. 文法轉自動機:生成一個喫一個,生成終結符串的,轉移到一個新增的接受狀態。
    因爲mermaid語法的限制,用方形框表示接受。
    S1AS\to 1A,則狀態qSq_S用字符11轉移到狀態qAq_A,其他以此類推。
    AA可以推出終結符串00,則qAq_A通過00轉移到新的接受狀態qHq_H

    1
    0
    1
    0
    qs
    qa
    qh
  4. 自動機轉文法:每一個轉移,對應一個產生式。轉移到接受狀態的,額外增加推出終結符串。
    qSq_S接受11轉移到qAq_A,所以文法有產生式qS1qAq_S\to 1q_A,其他以此類推。
    最後可能要做三消(消單消空消遞歸)。
    qS1qAqA1qSqA0qAqA0qH0 q_S\to 1q_A\\ q_A\to 1q_S\\ q_A\to 0q_A\\ q_A\to \bold{0q_H|0}

  5. 自動機轉正則式:狀態消去法
    要消去狀態qAq_A,入射qAq_A的有{qS}\{q_S\},出射qAq_A的有{qH,qS}\{q_H,q_S\},所以對qSq_SqHq_HqSq_S到$q_S $有影響。

    10*1
    10*0
    qs
    qh

    此時已經是基本結構,一舉寫出
    S=(101)100 S=(10^*1)^*10^*0

  6. 正則式轉自動機:按照運算順序,按基本運算還原。
    S=1(0+11)0S=1(0+11)^*0來還原,5.裏那個比較複雜。
    1,(0+11),01,(0+11)^*,0是依次連接的,對應自動機某一些狀態區域的空轉移。
    空閉包的結構是,要麼空轉移,要麼在原地轉圈後轉移。
    0+11的結構是,兩條並行線。
    11結構是,順序執行。

    rightZone
    midZone
    leftZone
    1
    0
    1
    1
    0
    c
    q3
    qf
    a
    q2
    d
    q1

4.4 有限自動機→正則表達式:狀態消去法

精髓:將正則表達式作爲轉移弧的標記。不斷刪去狀態,刪去狀態時將其前驅和後繼的轉移弧標記修改。刪到基本結構時寫出最終表達式。

刪除方法

在這裏插入圖片描述

基本結構

對於qFq\in F

  1. qq0q\ne q_0,則正則表達式爲(R+SUT)SU(R+SU^*T)^*SU^*,即觀察從q0q_0qq的可能路徑。
    爲到達q0q_0,可以在q0q_0自環轉任意次或者q0q_0qq之間反覆橫跳任意次。
    之後要到達qq,一定會單獨經過一次SS,然後在qq又可以自環轉任意次。

在這裏插入圖片描述

  1. q=q0q= q_0,最後可以刪到只剩下一個狀態。正則表達式爲RR^*.

在這裏插入圖片描述

  1. 當有F>1|F|\gt1,即有多個狀態被接受時,將到達每個終態的正則表達式加起來。

技巧:刪去的順序不一定,可以先局部再整體。

例子

在這裏插入圖片描述

在這裏插入圖片描述

  • 另有狀態消去法的形式化方法– CONVERT(G),但其不適合手工操作,略去不表。

4.5 正則表達式→有限自動機

精髓:將正則表達式的匹配過程寫成一個二叉樹,然後中序遍歷,按照幾種基本結構將其畫成自動機。
其實大多數時候是隨手畫。

基礎

在這裏插入圖片描述

歸納

在這裏插入圖片描述
在這裏插入圖片描述

4.6 右線性文法→有限自動機

精髓:因爲右線性文法每次會產生一個非終結符合一個終結符,將生成終結符作爲自動機的轉移條件,產生的非終結符作爲下一個狀態。
因爲只產生終結符時應該是接受狀態,但是文法中沒有這個符號,所以就新建一個符號H,讓終結符指向H,H被接受。
爲了不引入空轉移,根據是否能由S推出空串決定S的可接受性。

方法:設右線性文法GNTPSG=(N,T,P,S),構造一個與G等
價的有限自動機NFA MQTδq0FNFA\ M=(Q,T,δ,q_0,F),其中: QNHQ=N \cup {H}HH爲一個新增加的狀態, HNH\notin Nq0Sq_0=S.
F={{H,S},if SϵP{H} F=\begin{cases}\{H,S\},if\ S\rarr\epsilon \in P\\\{H\}\end{cases}
δ:\delta:
Bδ(A,a) if AaBPHδ(A,a) if AaPδ(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
例子

在這裏插入圖片描述

4.7 有限自動機→右線性文法

精髓:把δ\delta函數的轉移看成是一個個生成式。

方法:設NFA MQTδq0FNFA\ M=(Q,T,δ,q_0,F),構造一個右線性文法GNTPSG=(N,T,P,S),其中NQN=QSq0S=q_0

P:P:
AaB P if δ(A,a)=B, then if BF, add Aa to P A\rarr aB\ \in P\ if\ \delta(A,a)=B,\ then\ if\ B\in F,\ add\ A\to a\ to\ P
例子

在這裏插入圖片描述

4.8 DFA的最小化:填表算法

  • 最小化:對DFA M的極小化是找出一個狀態數比M少的
    DFA M1,使滿足 L(M) = L(M1)。若DFA M不存在互爲等價狀態不可達狀態,則稱 DFA M是最小化的.
  • 狀態偶對:兩個狀態的有序二元組稱爲狀態偶對。
  • 狀態的等價和可區分:兩者是對立的。對於某一DFA M,如果兩個狀態q0,q1q_0,q_1通過任意的串ω\omega可以轉移接收狀態(不一定是同一個接收狀態),則兩者等價。反之兩者可區分。
    即:設DFA M=(QTδq0F)DFA\ M = (Q,T,δ,q_0,F),若qx,qyQq_x,q_y\in Q,對於ωT\forall \omega\in T^*,若(qx,ω)(qx,ϵ)(qy,ω)(qy,ϵ)(q_x,\omega)┣^*(q_x,\epsilon)\leftrightarrow(q_y,\omega)┣^*(q_y,\epsilon),則qx,qyq_x,q_y等價,反之兩者可區分。
  • 不可達狀態:即無法從q0q_0輸入任何字符串ω\omega到達的狀態。

4.8.1 刪除不可達狀態

可以減小填表算法的負擔。
q0q_0開始,迭代尋找(bfs)可以到達的狀態QQ_{可達},則QQQ-Q_{可達}即爲不可達狀態,刪除不可達狀態即含有其的轉移條目。

4.8.2 填表算法

精髓:因爲狀態的等價關係是傳遞的,可以通過兩兩判斷等價性來找出所有等價的狀態。又因爲是自反的、對稱的,所以只需要一個n×nn\times n表格的下三角部分來記錄,且不需要對角線。
如果沒有理由認爲兩個狀態是可區分的,那麼就認爲他們是等價的。

方法

  1. 基礎:所有的終態和非終態是可區分的。
  2. 歸納:如果某兩個狀態qx,qyq_x,q_y可以通過符號aa轉移到兩個可區分的狀態,那麼他們是可區分的。

例子

在這裏插入圖片描述

4.8.3 等價狀態的合併

將所有的狀態根據等價性構成一個劃分,將劃分塊用其等價類代替。
用等價類作爲狀態標記構造一個新的DFA,其轉移關係爲:如果原來不同劃分之間至少有一種轉移,那麼這兩個等價類增加一條轉移。
即:設待最小化的DFA爲DFA A=(Q,T,δ,q0,F)DFA\ A = (Q, T, \delta, q_0 , F ) ,最小化的自動機爲DFA B=(QB,T,δB,[q0],FB)DFA\ B = (Q_B, T, \delta_B, [q0], F_B ) , 其中 QB={[q]qQ}Q_B=\{ [q] | q\in Q\}, δB([q],a)=[δ(q,a)]}\delta_B([q] ,a)=[\delta(q,a)]\}FB={[q]qF}F_B = \{ [q] | q\in F\}

4.8.4 例子

在這裏插入圖片描述

4.9 正則語言的泵引理

精髓:因爲正則語言對應的是有限自動機,其狀態數是有限的,那麼由Pigeonhole Rule,對於無限的語言(有限語言可以通過“並”構成正則語言),如果其爲正則語言,那麼一定會在自動機的某一段繞圈來達到無限。

泵引理:正則語言中足夠長的句子一定能拆成三段,並且中間一段重複0次或任意多次得到的句子仍然屬於正則語言(可以Pumping in和Pumping out)。泵引理成立是正則語言的一個必要條件

用泵引理來證明某語言不是正則語言

證明步驟

  1. 選任意的n.
  2. 找到一個滿足以下條件的串wLw\in L (長度至少爲n).
  3. 任選滿足w=xyzyϵxynw = xyz ∧ y\ne \epsilon ∧ |xy| \le nx,y,zx,y,z
  4. 找到一個 k0k\ge0, 使 xykzLxy^kz \ne L.

例子:利用泵引理證明下述語言不是正則語言:
L={1n2n0} L=\{1^{n^2}|n\ge 0\}
答:

  1. 假設LL是正則語言。
  2. 那麼,存在NZ+N\in Z^+,對於ωL(ωN)\forall \omega\in L(|\omega|\ge N)滿足泵引理。
  3. ω=1N2\omega = 1^{N^2},顯然ωL\omega \in Lω=N2N|\omega|=N^2\ge N
  4. 那麼,ω\omega可以被分爲ω=xyz\omega =xyz,且xyN,y>0|xy|\le N,|y| \gt 0.
  5. 那麼,yy只能是1m(m>0)1^m(m\gt 0),xx1l(l0)1^l(l\ge 0)zz1N2lm1^{N^2-l-m},且滿足m+lNm+l\le N
  6. 那麼xy2z=1l12m1N2lm=1N2+mxy^2z=1^l1^{2m}1^{N^2-l-m}=1^{N^2+m}
  7. 因爲m>0m\gt 0所以N2+m>N2N^2+m\gt N^2;因爲m+lNm+l\le Nl0l\ge 0,得mNm\le N,所以N2+mN2+N<N2+2N+1=(N+1)2N^2+m\le N^2+N\lt N^2+2N+1=(N+1)^2,所以N2<N2+m<(N+1)2N^2\lt N^2+m\lt (N+1)^2,即新串的長度嚴格位於兩個完全平方數之間,所以其不是完全平方數。
  8. xy2zLxy^2z\notin L,而由泵引理xy2zLxy^2z\in L,所以假設不成立,LL不是正則語言。

例子:由文法GG產生的語言L(G)L(G),其中P:SaSbScP:S\to aSbS|c.
語言的描述有很多種,用類似anbna^nb^n的公式化描述的只有一部分。還有用敘述性描述(比如a和b的數量一樣多)和文法描述的(本題)。這些描述有時候很難寫出完全等價的公式化描述,其實只需要其中的一個句子即可。

  1. 假設L是正則語言,則存在正整數N,對於任意L內的字符串ω\omega成立ωN|\omega|\ge N時,可以應用泵引理。
  2. 對於L,不妨取ω=aNc(bc)N=ω1ω0ω2\omega=a^Nc(bc)^N=\omega_1\omega_0\omega_2,則ω0>0,ω1ω0N|\omega_0|\gt 0,|\omega_1\omega_0|\le N,顯然ω0=ai(i>0)\omega_0=a^i(i\gt 0)
  3. 則對於ω=ω1ω02ω2=aN+ic(bc)N\omega'=\omega_1\omega_0^2\omega_2=a^{N+i}c(bc)^N,其不屬於LL(注意是文法那個L,不是取的句子),而與泵引理矛盾,所以L不是正則語言。

4.10 雙向有限自動機(2DFA)

雙向有限自動機:讀入一個字符之後,讀頭既可以左移一格, 也可以右移一格,或者不移動的有限自動機。

確定的雙向有限自動機: 每讀入一字符,必須向左或右移動,不考慮不移動的情況.

4.10.1 2DFA的五要素

2DFA M(QTδq0F)2DFA\ M=(Q,T ,δ, q_0, F)

δ:Q×TQ×{L,R}\delta:Q\times T\rarr Q\times\{L,R\}
δ(q,a)=(p,R) or δ(q,a)=(p,L) \delta(q,a)=(p,R)\ or\ \delta(q,a)=(p,L)
其他與DFA相同。即每次除了狀態轉移之外還要移動讀頭(左移或右移一格)。

4.10.2 2DFA的格局

  • 2DFA的格局和DFA的不同,要把字符串整個列出來。

  • δ(qam+1)=(pR)δ(q,a_{m+1})=(p,R)的格局表示:a1a2amqam+1ana1a2am+1pa+m+2ana_1 a_2…a_m q a_{m+1}…a_n┣ a_1 a_2…a_{m+1} p a+{m+2}…a_n

  • δ(qam+1)=(pL)δ(q,a_{m+1})=(p,L)的格局表示: a1a2amqam+1ana1a2am1pamam+1ana_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

4.10.3 2DFA接受的語言

  • 2DFA接受的語言是L(M)={ωqωωqqF}L(M)=\{ω| q_ω┣^*_ωq,q\in F\}

在這裏插入圖片描述

4.11 有輸出的有限自動機(Mealy&Moore)

有輸出的有限自動機是有限自動機的一個類型.
這類自動機在有字符輸入時,不僅存在狀態轉換, 同時引起字符輸出.

根據輸入字符,自動機狀態,輸出字符三者之 間關係,可有兩類有輸出的自動機:

米蘭機(Mealy): 輸出字符與輸入字符及狀態有關.
摩爾機(Moore): 輸出字符僅與狀態有關.

最大優點: 節省狀態

4.11.1 Mealy機

  • M(QTRδgq0)M=(Q,T ,R,δ, g , q_0)
    相比DFA,多了輸出函數g:Q×TRg:Q\times T\rarr R
    δ\deltagg函數共同描述Mealy機的工作情況。

  • 繪圖:
    {δ(p,a)=qg(p,a)=b \begin{cases}\delta(p,a)=q\\g(p,a)=b\end{cases}
    繪製爲

    a/b
    p
    q
  • 例子:
    在這裏插入圖片描述
    在這裏插入圖片描述

4.11.2 Moore機

  • M(QTRδgq0)M=(Q,T ,R,δ, g , q_0)
    相比DFA,多了轉移函數gg
    相比Mealy機,Moore機的轉移函數gg是個一元函數,只與當前狀態有關。

  • 繪圖:
    {δ(p,a)=qg(p)=b1g(q)=b2 \begin{cases}\delta(p,a)=q\\g(p)=b_1\\g(q)=b_2\end{cases}
    繪製爲

    a
    p,b1
    q,b2

    因爲輸出只與狀態有關,所以把輸出寫在狀態圈裏。

  • 例子

在這裏插入圖片描述

4.11.3 Moore機→Mealy機

  • Moore機比較簡單,所以轉換成Mealy機很方便。
  • 將Moore機中某個狀態qq的輸出bb,作爲新的Mealy機任何到達qq狀態的轉移時的輸出。
    即:設摩爾機M(Q,T,R,δ,g,q0)M=(Q, T, R,δ, g ,q_0) 米蘭機M(Q,T,R,δ,g,q0)M’=(Q, T, R,δ, g’, q_0) 如果δ(qa)=pδ(q,a)=p,$ g§ = b$ 則MM’中有g(qa)=b=g(δ(qa))g’(q,a) = b = g(δ(q,a))

例子

在這裏插入圖片描述

4.11.4 不做要求:Mealy機→Moore機

略去不表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章