NDFA 到 DFA 的转换
问题陈述
设 X = (Qx, ∑, δx, q0, Fx) 为接受语言 L(X) 的 NDFA。我们必须设计一个等效的 DFA Y = (Qy, ∑, δy, q0, Fy),使得 L(Y) = L(X)。以下过程将 NDFA 转换为其等效的 DFA −
算法
输入 − NDFA
输出 −等效 DFA
步骤 1 − 从给定的 NDFA 创建状态表。
步骤 2 − 在可能的输入字母表下为等效 DFA 创建一个空白状态表。
步骤 3 − 用 q0 标记 DFA 的起始状态(与 NDFA 相同)。
步骤 4 − 为每个可能的输入字母表找出状态 {Q0, Q1,... , Qn} 的组合。
步骤 5 − 每次我们在输入字母表列下生成一个新的 DFA 状态时,我们必须再次应用步骤 4,否则转到步骤 6。
步骤 6 −包含 NDFA 的任何最终状态的状态都是等效 DFA 的最终状态。
示例
让我们考虑下图所示的 NDFA。
q | δ(q,0) | δ(q,1) |
---|---|---|
a | {a,b,c,d,e> | {d,e> |
b | {c> | {e> |
c | ∅ | {b> |
d | {e> | ∅ |
e | ∅ | ∅ |
利用上述算法,我们找到了它的等价DFA。DFA的状态表如下所示。
q | δ(q,0) | δ(q,1) |
---|---|---|
[a] | [a,b,c,d,e] | [d,e] |
[a,b,c,d,e] | [a,b,c,d,e] | [b,d,e] |
[d,e] | [e] | ∅ |
[b,d,e] | [c,e] | [e] |
[e] | ∅ | ∅ |
[c, e] | ∅ | [b] |
[b] | [c] | [e] |
[c] | ∅ | [b] |
DFA的状态图如下 −