NTU 课程辅助笔记: NFA到DFA的转化
我們以這張圖為例:
用?Finite State Machine Designer - by Evan Wallace (madebyevan.com)?畫的,有幾條邊的mark沒畫好錯位了
?
?1 寫出狀態轉換表
行index表示狀態,列index表示條件,表格內的是后繼狀態
2 求出ε-閉包 (ε-closure)
????????ε-closure(s)表示由狀態s經由條件ε可以到達的?所有狀態的集合(包括自身)
| ε-closure(0) | {0,1,2,4,7} |
| ε-closure(1) | {1,2,4} |
| ε-closure(2) | {2} |
| ε-closure(3) | {1,2,3,4,6,7} |
| ε-closure(4) | {4} |
| ε-closure(5) | {1,2,4,5,6,7} |
| ε-closure(6) | {1,2,4,6,7} |
| ε-closure(7) | {7} |
| ε-closure(8) | {8} |
| ε-closure(9) | {9} |
?3 將初始態的轉換閉包ε-closure(0)設為狀態A?
????????即A={0,1,2,4,7}
4? 寫出狀態A經過上面轉換圖中所有轉換條件得到的狀態的ε 閉包
- ε-closure(0) = A={0,1,2,4,7}
- ε-closure(move(A,a)) = ε-closure({3,8}) = {1,2,3,4,6,7,8} = B
- ε-closure(move(A,b)) = ε-closure(5) = {1,2,4,5,6,7} = C
- ε-closure(move(B,a)) = ε-closure({3,8}) = {1,2,3,4,6,7,8} = B
- ε-closure(move(B,b)) = ε-closure({5,9}) = {1,2,4,5,6,7,9} = D
- ε-closure(move(C,a)) = ε-closure({3,8}) = {1,2,3,4,6,7,8} = B
- ε-closure(move(C,b))= ε-closure(5) = {1,2,4,5,6,7} = C?
- ε-closure(move(D,a)) = ε-closure({3,8}) = {1,2,3,4,6,7,8} = B
- ε-closure(move(D,b)) = ε-closure(5) = {1,2,4,5,6,7} = C
5 畫出DFA 狀態轉換表
| a | b | |
| A | B | C |
| B | B | D |
| C | B | C |
| D | B | C |
6 畫出DFA狀態轉換圖
????????
? ? ? ? 注:
7 DFA 最小化?
?
?7.1 消除多余狀態
? ? ? ? 多余狀態的特征:
1)從這個狀態出發沒有通路到達終態
2)從開始狀態出發,任何輸入串也不能到達的那個狀態
舉例說明:
?7.2 合并等價狀態
? ? ? ? 等價狀態的特征:
1)?一致性條件:狀態s和t必須同時為終態或非終態
2)蔓延性條件:對于所有輸入符號,狀態s和狀態t必須轉化到等價的狀態里
?7.2.1 合并等價狀態舉例
? ? ? ? (來自NFA到DFA的轉化_只有十分努力,才能看起來毫不費力-CSDN博客_nfa轉dfa)
????????
????????
? ? ? ? 首先畫出狀態轉移表?
????????
? ? ? ? 然后?我們看:
1)6和7同時是終態,滿足條件1;同時6和7都能在b的情況下轉換成6,所以這兩個狀態可以合并
2)然后我們就可以合并3和4
3)然后就可以合并1和2
于是就有:
????????
即:
?????????
?
? ? 8 我們的問題的優化DFA
| a | b | |
| A | B | C |
| B | B | D |
| C | B | C |
| D | B | C |
首先C和D可以合并:
| a | b | |
| A | B | E |
| B | B | E |
| E | B | E |
然后A和E可以合并
| a | b | |
| B | B | F |
| F | B | F |
B和F不能合并了,因為一個是終態,一個是非終態
? ? ? ? 所以簡化后的DFA為
????????
?
總結
以上是生活随笔為你收集整理的NTU 课程辅助笔记: NFA到DFA的转化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTU 课程笔记: PNP
- 下一篇: NTU 课程笔记 7454 GAN