NFA轉化為DFA


NFA(不確定的有窮自動機)轉化為DFA(確定的有窮自動機)

NFA轉換DFA,通常是將帶空串的NFA(即:ε-NFA)先轉化為不帶空串的NFA(即:NFA),然后再轉化為DFA。

提示:ε是空串的意思!空串沒有任何字符!

image

這里直接講將ε-NFA轉化為DFA的過程,將NFA轉化為DFA的情況類似。

轉化的過程總的來說有兩大步驟:ε-NFA轉化為DFA,以及DFA簡化

ε-NFA轉化為DFA前件知識

1、對狀態圖進行改造

增加狀態X,Y,使之成為新的唯一的初態和終態,從X引ε弧到原初態節點,從原終態節點引ε弧到Y節點。

image

2、利用子集法對NFA進行確定化。

  • 子集法

子集法:將NFA轉化為接受同樣語言的DFA。

DFA的每一個狀態對應NFA的一組狀態;

DFA使用它的狀態去記錄NFA讀入一個符號后可能達到的所有狀態

image

如上圖,A對應ε-NFA的0和1狀態,A代表的是一組狀態。因此,DFA使用它的狀態去記錄NFA讀入一個符號后可能達到的所有狀態。

  • 構造狀態轉化表
    • ε-closure(ε-閉包)

狀態集合I的ε-閉包是一狀態集。

任何狀態q∈I,則q∈ε-closure(I)

任何狀態q∈I,則q經任意條ε弧而能到達的狀態q'∈ε-closure(I)

比如上圖,假設I={0},那么0∈ε-closure(I);並且0經ε弧能到達1狀態,因此,1∈ε-closure(I)。即:ε-closure({0})={0,1}。

案例再現

可能前面的理論有些亂,理不清,這里用一個例題演繹如何將ε-NFA轉化為DFA。

已知下面的NFA圖,求確定后的DFA:

image

①改造狀態圖:在起始狀態分別加上X、Y狀態,連接輸入符號為ε。

image

②狀態轉換表

狀態集合 \狀態 0 1
A={X,0,2,1} B={2,3,1} C={2,1}
B={2,3,1} D={2,4,3,1,Y} C={2,1}
C={2,1} B={2,3,1} C={2,1}
D={2,4,3,1,Y} D={2,4,3,1,Y} C={2,1}

!提示:A,B,C,D表示狀態集合;0,1分別表示狀態0和1。第二行第二列表示狀態集合A的狀態在輸入符號0后到達的狀態的ε-閉包為B={2,3,1}

獲得改造后的狀態圖后,我們找到起始狀態為X,由於X與0之間是輸入的ε符號,所以X與0等價;同理,0與2等價,1與2等價。所以,起始狀態有{X,0,2,1},我們給它命名為狀態A。

再看第二列,處於起始狀態A時,當輸入字符為0時到達的狀態分別有:2輸入0到達2本身;1輸入0到達3,因此還有3狀態。再看與2等價的狀態有:1;與3等價的狀態無。因此,輸入字符0時到達的狀態有{2,3},它的閉包是:{2,3,1}。

第三列同理,處於起始狀態A時,當輸入字符為1時到達的狀態只有2。2的等價狀態有1。因此,輸入字符1時A到達的狀態有{2},它的閉包是{2,1}。

!注意:狀態轉換表里面填入的是閉包結果。

最后得到的DFA圖為:(未簡化)

image

DFA簡化

狀態S和狀態T等價的條件
  • 一致性條件:狀態S和T必須同時為可接受狀態不可接受狀態
  • 蔓延性條件:對於所有符號,狀態S和T必須轉換到等價的狀態里。
DFA簡化算法:

1、假定一個集合中的狀態都是等價的,首先將DFA的所有狀態放在一個集合I中。

2、所有狀態分成兩個子集——終態集和非終態集。運用判定狀態等價原則分別對兩個子集的狀態進行分析和划分。若發現某個狀態與其他狀態不等價,則將其作為一個新的狀態子集,如果無法區分,則放在同一子集中。

3、從每個子集中選出一個狀態做代表,即可構成簡化的DFA。

4、含有原來初態的子集仍為初態,各終態的子集仍為終態。

案例再現

將上面未簡化的DFA圖簡化:

①I = {A,B,C,D}

②拆分終態集和非終態集:

非終態集{A,B,C}+終態集{D}

③對{A,B,C}繼續拆分:

A輸入0后到達B,而B⊆{A,B,C},故A不能拆分;

再看B,B輸入0后到達D,而D{A,B,C},故B可以拆分;

再看C,C輸入0后到達B,B⊆{A,B,C},故C也不能拆分。

綜上:{A,B,C}可拆分為{A,C}+{B}。

④對{A,C}繼續拆分:

A輸入1時到達C,而C⊆{A,C},故A不可拆分;

再看C,C輸入1時到達C狀態,而C⊆{A,C},故C也不可拆分。

⑤綜合起來,上面未簡化的DFA圖簡化后得到的狀態應該是:{A,C}+{B}+{D}。

!注意:同一個{}大括號里面的狀態是等價的,因此,畫圖時選其一即可。

簡化后的DFA圖為:

image

Are you got it?(你學會了嗎?)


免責聲明!

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



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