理論上可以證明,每一個正則集合可以由一個狀態數最小的DFA識別,且這個DFA是唯一的。本博客將介紹如何把一個DFA的狀態數化簡到最小,而不影響接受的語言。
化簡的DFA:當且僅當它沒有多余狀態并且它的狀態集中沒有兩個狀態是相互等價的。
等價狀態:是指對于DFA中所有狀態s和t,對于所有輸入符號c,存在Ic(s)=Ic(t),即狀態s,t具有相同的后繼,則稱s和t是等價的。
狀態s和t等價的條件是:
(1)一致性條件:狀態s和t必須同時為接受狀態和不接受狀態。(是否屬于終止狀態集)
(2)蔓延性條件:對于所有輸入符號,狀態s和t必須轉換到等價狀態里。
下面介紹一種具體的DFA化簡方法——分割法。
Sample:
已知一個確定的有窮自動機M=({0,1,2,3,4,5}, {a,b}, δ, 0, {0,1}),其中δ見表
狀態 | a | b |
---|---|---|
0 | 1 | 2 |
1 | 1 | 4 |
2 | 1 | 3 |
3 | 3 | 2 |
4 | 0 | 5 |
5 | 5 | 4 |
Step 1:
根據一致性條件,將狀態分為兩類。0,1屬于終止狀態集,歸為一類,其他歸為另一類。
狀態 | a | b | 類別 |
---|---|---|---|
0 | 1(A) | 2(B) | A |
1 | 1(A) | 4(B) | A |
2 | 1(A) | 3(B) | B |
3 | 3(B) | 2(B) | B |
4 | 0(A) | 5(B) | B |
5 | 5(B) | 4(B) | B |
Step 2:
根據蔓延性條件,對狀態進行再分類。由上圖可以看出:2,4屬于同一類;3,5屬于另一類。
狀態 | a | b | 類別 |
---|---|---|---|
0 | 1(A) | 2(B) | A |
1 | 1(A) | 4(B) | A |
2 | 1(A) | 3(C) | B |
3 | 3(C) | 2(B) | C |
4 | 0(A) | 5(C) | B |
5 | 5(C) | 4(B) | C |
然后我們再進行檢查,發現A,B,C三類中狀態都已等價(每一個狀態都有相同的后繼)。如果不等價,則按照剛才方法進行再分。
所以我們得到的最小化DFA為M'=({A,B,C}, {a,b}, δ,A,{A}),其中δ見表
狀態 | a | b |
---|---|---|
A | A | B |
B | A | C |
C | C | B |