NFA转换为DFA

NFA转换为DFA
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}

相关主题
相关文档
最新文档