NFA转换为DFA
例1:给定下列自动机:
把图1所示的NFA 转换为DFA 。
解1:给出图1所示的NFA 的状态转换函数: f({S ,P ,Z},0)={{P},Ф,{P}}
0 0 0 0 0 0 f '(Ф,0)=Ф 0 0 1 0 0 1 f '([Z],0)= [P] 0 1 0 0 1 0 f '([P],0)=Ф
0 1 1 0 1 1 f '([P,Z],0)= [P]
1 0 0 1 0 0 f '([S],0)= [P]
1 0 1 1 0 1 f '([S,Z],0)= [P]
1 1 0 1 1 0 f '([S,P],0)= [P] 1 1 1 1 1 1 f '([S,P,Z],0)= [P]
f({S ,P ,Z},1)={{S,Z},{Z},{P}} 0 0 0 0 0 0 f '(Ф,1)=Ф
0 0 1 0 0 1 f '([Z],1)= [P] 0 1 0 0 1 0 f '([P],1)= [Z] 0 1 1 0 1 1 f '([P,Z],1)= [P,Z]= [PZ]
1 0 0 1 0 0 f '([S],1)= [S,Z]= [SZ]
1 0 1 1 0 1 f ' 1 1 0 1
1 0 f '([S,P],1)= [S,Z]=[SZ]
1 1 1 1 1 1 f '([S,P,Z],1)= [S,P,Z]= [SPZ]
根据求得的转换函数f ',可以得到图2的DFA1,去掉非法状态和不可达状态可以得到图3的DFA2。
解2:① 首先计算ε-closure({S,P}),令T0=ε-closure ({S,P)={ S,P },把T0 加入C 中;C={T0}
T0未被标记,它现在是子集族C 的唯一成员。
② 标记T0;则J= move(T0,0)={P},令ε-closure (J)={P}= T1,将T1加入C 中,C={T0,T1}; J= move(T0,1)={S ,Z},令ε-closure (J)={S ,Z}= T2,,将T2加入C 中,C={T0,T1,T2}。 ③标记T1;则J= move(T1,0)=Ф,ε-closure (J) =Ф; J= move(T1,1)={ Z},令ε-closure (J)={ Z}= T3,,将T3加入C 中,C={T0,T1,T2,T3}。
开始状态:S 、P
终止状态:Z
图1 NFA
图3 DFA2 图2 DFA1 ? 0 1
?SP P SZ
P Z
+SZ P SPZ + Z P P +SPZ P SPZ
图4 状态矩阵转换法
④标记T2;则J= move(T2,0)={P},ε-closure(J)={P}= T1,C中已经存在T1;
J= move(T2,1)={S,Z,P},令ε-closure(J)={S,P,Z}= T4,,将T4加入C中,C={T0,T1,T2,T3,T4}。
⑤标记T3;则J= move(T3,0)={P},ε-closure(J)={P}= T1,C中已经存在T1;
J= move(T3,1)={P},ε-closure(J)={P}= T1,C中已经存在T1,C={T0,T1,T2,T3,T4}。
⑥标记T4;则J= move(T4,0)={P},ε-closure(J)={P}= T1,C中已经存在T1;
J= move(T4,1)={S,P,Z},令ε-closure(J)={S,P,Z}= T4,C中已经存在T4。
C中所有元素均被处理过了,且再无新的元素加入C中,算法结束。
C={T0,T1,T2,T3,T4}={{ S,P },{P},{S,Z},{Z},{S,P,Z}}
现在得到与原NFA M等价的DFA M':
1)K'={[T0],[T1],[T2],[T3],[T4]}={[SP],[P],[SZ],[ Z],[SPZ]}= {SP,P,SZ,Z,SPZ} 2)∑'={0,1}
3)f'=([T0],0)=[T1]=P f'=([T0],1)=[T2]=SZ
f'=([T1],0)= Фf'=([T1],1)=[T3]=Z
f'=([T2],0)=[T1]=P f'=([T2],1)=[T4]=SPZ
f'=([T3],0)=[T1]=P f'=([T3],1)=[T1]= P
f'=([T4],0)=[T1]=P f'=([T4],1)=[T4]=SPZ
4)S'=[T0]=SP
5)Z'={[T2],[T3],[T4]}={ SZ,Z,SPZ}