㈠ dfa的最小化如何化簡的步驟
下面具體介紹DFA的化簡演算法:
(1) 首先將DFA M的狀態劃分出終止狀態集K1和非終止狀態集K2。
K=K1∪K2
由上述定義知,K1和K2是不等價的。
(2) 對各狀態集每次按下面的方法進一步劃分,直到不再產生新的劃分。
設第i次劃分已將狀態集劃分為k組,即:
K=K1(i)∪K2(i)∪…∪Kk(i)
對於狀態集Kj(i)(j=1,2,…,k)中的各個狀態逐個檢查,設有兩個狀態Kj』、 Kj』』∈Kj(i),且對於輸入符號a,有:
F(Kj',a)=Km
F(Kj'',a)=Kn
如果Km和Kn屬於同一個狀態集合,則將Kj』和Kj』』放到同一集合中,否則將Kj』和Kj』』分為兩個集合。
(3) 重復第(2)步,直到每一個集合不能再劃分為止,此時每個狀態集合中的狀態均是等價的。
(4) 合並等價狀態,即在等價狀態集中取任意一個狀態作為代表,刪去其他一切等價狀態。
(5) 若有無關狀態,則將其刪去。
根據以上方法就將確定有限自動機進行了簡化,而且簡化後的自動機是原自動機的狀態最少的自動機。
㈡ DFA的最小化演算法
首先劃分終態集和非終態集,之後不斷進行劃分,直到不再發生變化。
每輪劃分對所有子集進行。對一個子集的劃分中,若每個輸入符號都能把狀態轉換到等價的狀態,則兩個狀態等價。
劃分完成後,從每個子集選出一個代表,若DFA中存在兩個子集內狀態之間的轉換,則MFA中兩個子集的代表之間也存在對應的轉換。簡便方法:對每個子集刪去除代表以外的狀態,並把指向它們的箭弧改為指向代表。
MFA的初態是含有DFA初態的子集的代表。MFA的終態集是DFA終態集劃分出來子集的代表。
最後,從MFA中刪除從初態無法到達的狀態和死狀態(只有入射弧或指向自身的出射弧的非終止狀態)。
去除不可達狀態。建表,行列為不同狀態,未標記的格子行列狀態等價。首先標記行列一個非終止狀態一個終止狀態的格子。對未標記的格子(q,q'),若存在一個輸入符號a,使q經a到達狀態和q'經a到達狀態不等價,則標記(q,q')。重復直到表格不再變化。
對於所有未標記的(q,q'),把與q'有關的轉換都改到q上,刪除q'。
㈢ 編譯原理中,在DFA的最小化問題。
是要分到兩個不同集合里的
但是我建議 在極小化時先引入「死狀態」
如果一個DFA的轉換函數不是全函數,則要引入一個「死狀態」sd,sd對所有輸入符號都轉換到sd本身。
這樣你做的時候就會看的很明白