1. 程式人生 > >NFA確定化為DFA 並最小化DFA

NFA確定化為DFA 並最小化DFA

把 NFA 確定化為 DFA 的演算法實現

1)轉換思路

由非確定的有限自動機出發構造與之等價的確定的有限自動機的辦法是確定的有限自動機的狀態對應於非確定的有限自動機的狀態集合,即要使轉換後的DFA的每一個狀態對應NFA的一組狀態。該DFA使用它的狀態去記錄在NFA讀入一個輸入符號後可能到達的所有狀態,也就是說,在讀入符號串a1a2a3…an之後,該DFA處在這樣一個狀態,該狀態表示這個NFA的狀態的一個子集T,而T是從NFA的開始狀態沿著某個標記為a1a2a3…an的路徑可以到達的那些狀態。

2)消除空轉移

消除N—>ε形式的產生式,即消除空轉移。狀態集合I的a弧轉換Ia:定義為一狀態集,是指從狀態集I出發先經過a弧後再經過若干條ε弧而能到達的狀態的集合。可以寫作:Ia= ε-closure(J),J=move(I,a),其中,J是從I中任一狀態出發經過一條a弧到達的狀態集合記為move(I,a)。

s 表示NFA的狀態,T 表示NFA的狀態集合,a表示一個input symbol

ε-transition(ε轉換)就是說input symbol為ε時的transition(轉換) 

3)資料流程圖

 

 

 

 

 

 

 

 

 

 

實驗結果及分析(包括結果描述、實驗現象分析、影響因素討論、綜合分析和結論等)

5. 把 NFA 確定化為 DFA 的演算法實現

實現NFA例題為:

NFA M=({S,P,Z},{0,1},f,{s,p},{z})

其中

f(s,0)={p}        f(z,0)={p}          f(p,1)={z}

f(z,1)={p}        f(s,1)={s,z}

根據例題輸入NFA各邊的資訊得出DFA結果如下圖

 

NFA轉DFA 原始碼見https://download.csdn.net/download/gyx1549624673/10840160