NDFA 到 DFA 转换
问题陈述
令X = (Q x , Σ, δ x , q 0 , F x )为接受语言 L(X) 的 NDFA。我们必须设计一个等效的 DFA Y = (Q y , Σ, δ y , q 0 , F y )使得L(Y) = L(X)。以下过程将 NDFA 转换为其等效的 DFA -
算法
输入- NDFA
输出- 等效的 DFA
步骤 1 - 根据给定的 NDFA 创建状态表。
步骤 2 - 在等效 DFA 的可能输入字母下创建一个空白状态表。
步骤 3 - 用 q0 标记 DFA 的开始状态(与 NDFA 相同)。
步骤 4 - 找出每个可能的输入字母表的状态 {Q 0 , Q 1 ,... , Q n } 的组合。
步骤 5 - 每次我们在输入字母列下生成新的 DFA 状态时,我们都必须再次应用步骤 4,否则转到步骤 6。
步骤 6 - 包含 NDFA 任何最终状态的状态是等效 DFA 的最终状态。
例子
让我们考虑下图所示的 NDFA。
q | δ(q,0) | δ(q,1) |
---|---|---|
A | {a,b,c,d,e} | {d,e} |
乙 | {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 的状态图如下 -