正規式—>最小DFA詳解


整體分三步:

  1. 把正規式轉換為NFA(非確定有窮自動機)
  2. 將NFA通過“子集構造法”轉換為DFA
  3. 最后把DFA通過分割法進行最小化

一、正規式轉換為NFA

反復運用圖(1)轉換規則,把正則表達式轉換為有限自動機

                                               圖(1)

 

例如:

 

                                                                       圖(2)

 

 二、子集構造法確定DFA

將圖 (2)根據子集構造(詳細方法見編譯原理隨筆)法轉換為DFA,如圖(3),

 

                                                                               圖(3)

  這個表是從NFA到DFA的時候必須要用到的。第一列第一行I的意思是從NFA的起始節點經過任意個ε所能到達的結點集合。

Ia表示從該集合中的每個結點開始經過一個a所能到達的集合,經過一個a的意思是可以略過前后的ε,同樣Ib也就是經過一個b,

可以略過前后任意個ε。

  至於第二行以及后面的I是怎么確定的,可以根據上一行中Ia,Ib的值確定。第一行Ia{2,4,6,7,9},Ib{5,6,7,8,9,},故I的值可取{2,4,6,7,9},

{5,6,7,8,9,}。可以發現上面的Ia和Ib哪個還沒出現在I列,就拿下來進行運算,該列對應的Ia和Ib的值可根據子集構造法推出。如果還不太明白,

仔細觀察圖(3)你會發現I中的幾個值都在Ia和Ib中出現了,而且是完全出現。

  這步做完以后,為了畫出最后的DFA,那么肯定得標出一些號來,比如1,2,3。或者A,B,C,我一般標的方法是先把I列全部標上 1,2,3 遞增。

然后看1表示的集合和Ia和Ib中的哪個集合一樣,就把那個集合也表示為1.繼續向下做。最后會得到這樣一個表格。如圖(4),

 

 

                                                                            圖(4)

  至此,就可以表示出DFA了。就對照上面那個表,從0節點開始經過a到1經過b到2,就這樣畫就行了。最后的DFA如下圖,見圖(5),

 

 

                                          圖(5)

  雙圈的表示終態,這個是怎么來的呢。去看看圖4,會發現有些項之前有雙圈標志,這個是因為在NFA圖2中,9為終態,

所以所有包含9的集合都被認為是終態集,改成1.2.3.。方便畫節點后就需要把這些點作為終態了。

三、最小化、分割

最小化就是尋求最小狀態DFA 

最小狀態DFA的含義:
1、沒有多余狀態(死狀態)

 

 

 

除多余狀態

什么是多余狀態?

從這個狀態沒有通路到達終態,即S1

從開始狀態出發,任何輸入串也不能到達的那個狀態,即S2

如何消除多余狀態?刪除即可。

 

2、沒有兩個狀態是互相等價(不可區別)

兩個狀態s和t等價的條件:

兼容性(一致性)條件——同是終態或同是非終態

傳播性(蔓延性)條件——對於所有輸入符號,狀態s和狀態t必須轉換到等價的狀態里。

假定s和t是M的兩個不同狀態,如果從狀態s出發讀出某個字w而終止於終態,同樣,

從狀態t出發讀出某個字w而終止於終態,我們稱s和t等價。

DFA的最小化—例子,第一步都是固定的。分成終態和非終態:

1.將M的狀態分為兩個子集一個由終態k1={C,D,E,F}組成,一個由非終態k2={S,A,B}組成。

2.考察{S,A,B}是否可分。

 

因為A經過a到達C屬於k1.而S經過a到達A屬於k2。B經過a到達A屬於k2,所以K2繼續划分為{S,B},{A}。

3.考察{S,B}是否可再分:

B經過b到達D屬於k1。S經過b到達B屬於k2,所以S,B可以划分。划分為{S},{B}

4.考察{C,D,E,F}是否可再分:

因為C,D,E,F經過a和b到達的狀態都屬於{C,D,E,F}=k1所以相同,所以不可再分。

5.{C,D,E,F}以{D}來代替則,因為CDEF相同,你也可以用C來代替。無所謂的最小化的DFA如圖:

 

 注:本為為轉載文章,本人略微修改,如果存在問題,請聯系我刪除。

 原文鏈接:https://www.cnblogs.com/cute/p/4021689.html

 


免責聲明!

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



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