編譯原理(二) NFA的確定化及DFA的最小化
阿新 • • 發佈:2019-02-16
1. NFA的確定化
1.1. 明確NFA的定義
一個非確定的有窮自動機(NFA)M是一個五元式:
- M=(S,∑,δ,S0,F)
- S是一個有限集,它額每個元素稱為一個狀態。
- ∑是一個有窮字母表,它的每個元素稱為一個輸入字符
- δ是一個從S×∑∗至S子集額單值映射。即:δ:S×∑∗→2⋅S
- S0⊆S,是一個非空的初態集
- F⊂ S , 是一個終態集(可空)
1.2. 定義運算
定義對狀態集合I的幾個有關運算:
- 狀態集合I的ε-閉包,表示為ε-closure(I),定義為一狀態集,是狀態集I中的任何狀態s經任意條ε弧而能到達的狀態的集合。狀態集合I的任何狀態s都屬於ε-closure(I)。
- 狀態集合I的a弧轉換,表示為move(I,a)定義為狀態集合J,其中J是所有那些可從I的某一狀態經過一條a弧而到達的狀態的全體。
定義Ia = ε
1.3. 演算法描述
- 每次從隊頭取出一個集合,(開始佇列內只有初態集合I的ε-閉包(I) ),然後得到它對於任意一個字元a的Ia=ε−closure(move(I,a))
- 然後如果當前狀態之前沒有出現過,那麼當前狀態作為一個新的狀態I,放入佇列。
- 一直做如上操作,直到佇列為空
2. DFA的最小化
2.1. 明確DFA的定義
一個確定的有窮自動機(DFA)M是一個五元式:
- M=(S, ∑, δ, s0, F)其中
- S是一個有限集,它的每個元素稱為一個狀態。
- ∑是一個有窮字母表,它的每個元素稱為一個輸入字元
-δ是一個從S×∑至S的單值對映。δ(s,a)=s’意味著:當現行狀態-為s、輸入字元為a時,將轉換到下一個狀態s’。我們稱s’為s的一個後繼狀態。 - s0∈S,是唯一的初態。
- F ⊂ S,是一個終態集(可空)
2.2 演算法描述
- DFA M =(K,∑,f, k0,, kt),最小狀態DFA M’
- 1.構造狀態的初始劃分∏0:終態kt 和非終態K- kt兩組
- 2.對∏施用傳播性原則 構造新劃分∏new
- 3.如∏new=∏,則令∏new=∏並繼續步驟4,否則∏:=∏new重複2
- 4.為∏final中的每一組選一代表,這些代表構成M’的狀態。若k是一代表且f(k,a)=t,令r是t組的代表,則M’中有一轉換f’(k,a)=r M’ 的開始狀態是含有K0的那組的代表 M’的終態是含有Kt的那組的代表
- 5.去掉M’中的死狀態.