 |
例 3.3 应用左面的算法对图4.4的NFA
N构造子集,步骤如下: |
|
① 首先计算ε-closure(0),令T0=ε-closure(0)={0,1,2,4,7},T0未被标记,它现在是子集族C的唯一成员。
② 标记T0;令T1=ε-closure(move(T0,a))={1,2,3,4,6,7,8},将T1加入C中,T1未被标记。
令T2=ε-closure(move (T,b))={1,2,4,5,6,7},将T2加入C中,它未被标记。
③ 标记T1;计算ε-closure(move(T1,a)),结果为{1,2,3,4,6,7,8},即T1,T1已在C中。
计算ε-closure(move(T1,b)),结果为{1,2,4,5,6,7,9},令其为T3,T3加至C中,它未被标记。
④ 标记T2,计算ε-closure(move(T2,a)),结果为{1,2,3,4,6,7,8},即T1,T1已在C中。
计算ε-closure(move(T2,b)),结果为{1,2,4,5,6,7},即T2,T2已在C中。
⑤ 标记T3,计算ε-closure(move(T3,a)),结果为{1,2,3,4,6,7,8},即T1。
计算ε-closure(move(T3,b)),结果为{1,2,4,5,6,7,10},令其为T4,加入C中,T4未被标记。
⑦ 标记T4,计算ε-closure(move(T4,a)),结果为{1,2,3,4,6,7,8},即T1
计算ε-closure(move(T4,b))结果为{1,2,4,5,6,7},即T2。
至此,算法终止共构造了五个子集:
T0={0,1,2,4,7} T1={1,2,3,4,6,7,8}
T2={1,2,4,5,6,7} T3={1,2,4,5,6,7,9}
T4={1,2,4,5,6,7,10} |
那么图4.4的NFA N构造的DFA M为
① S={[T0],[T1],[T2],[T3],[T4]}
② Σ={a,b}
③ D([T0],a)=[T1]
D([T2],a)=[T1]
D([T0],b)=[T2]
D([T2],b)=[T2]
D([T1],a)=[T1]
D([T3],a)=[T1]
D([T1],b)=[T3]
D([T3],b)=[T4]
D([T4],a)=[T1]
D([T4],b)=[T2]
④ S0=[T0]
⑤ St=[T4]
不妨将[T0],[T1],[T2],[T3],[T4]重新命名,以利于书写,或用A,B,C,D,E或用0,1,2,3,4分别表示。若采用后者,该DFA
M的状态转换图如图4.6所示。 |