如何将带有 ε 的 NFA 转换为 DFA?(理论计算机科学)
在这个方法中,我们首先将带有 ε 的非确定性有限自动机 (NFA) 转换为不带 ε 的 NFA。
然后,不带 ε 的 NFA 可以转换为其等效的确定性有限自动机 (DFA)。
转换方法
将带有 ε 的 NFA 转换为 DFA 的方法解释如下:
步骤 1 - 假设 M={Q, Σ, δ,q0,F) 是带有 ε 的 NFA。我们必须将这个带有 ε 的 NFA 转换为等效的 DFA,记为
M0=(Q0,Σ, δ0,q0,F0)
然后得到:
ε-闭包(q0) ={p1,p2,p3,……pn}
然后 [p1,p2,p2,….pn] 成为 DFA 的起始状态
现在 [p1,p2,p3,….pn] ∈ Q0
步骤 2 - 我们将为每个输入获得 [p1,p2,p3,…pn] 上的 δ 转移。
δ 0([p1,p2,p3,..pn],a) = ε-闭包(δ(p1,a) U δ(p2,a2)U……………… δ(pn,a))
= U (i=1 to n) ε-闭包 d(pi,a)
其中 a 是输入 ∈Σ
步骤 3 - 获得的状态 [p1,p2,p3,…pn] ∈ Q0。
包含最终状态 pi 的状态是 DFA 中的最终状态
示例
将以下带有 epsilon 的 NFA 转换为等效的 DFA
解答
考虑以下用于将带有 epsilon 的 NFA 转换为 DFA 的 NFA:

为了转换这个带有 epsilon 的 NFA,我们将首先找到 ε-闭包,如下所示:
- ε-闭包(q0)={q0,q1,q2}
- ε-闭包(q1)={q1,q2}
- ε-闭包(q2)={q2}
让我们从起始状态的 ε-闭包开始,如下所示:
当 ε-闭包(q0)={q0,q1,q2} 时,我们将此状态称为 A。
现在,让我们找到对 A 的每个输入符号的转移,如下所示:
δ'(A, a) = ε-closure(δ(A,a))
= ε-closure(δ(q0,q1,q2), a))
= ε-closure(δ(q0, a) ∪ δ(q1,a) U δ(q2,a) )
= ε-closure(ΦUq1 ∪q2)
= ε-closure(q1)
= {q1, q2} let us call it as state B
δ'(A, b) = ε-closure(δ(A,b))
= ε-closure(δ(q0,q1,q2), b))
= ε-closure(δ(q0, b) ∪ δ(q1,b) U δ(q2,b) )
= ε-closure(q0 U Φ∪q0)
= ε-closure(q0)
= {q0,q1, q2} its nothing but state A
δ'(B, a) = ε-closure(δ(B,a))
= ε-closure(δ(q1,q2), a))
= ε-closure(δ(q1,a) U δ(q2,a) )
= ε-closure(q1 ∪q2)
= ε-closure(q1)
= {q1, q2} its nothing but state B
δ'(B, b) = ε-closure(δ(B,b))
= ε-closure(δ(q1,q2), b))
= ε-closure(δ(q1,b) U δ(q2,b) )
= ε-closure(Φ∪q0)
= ε-closure(q0)
= {q0,q1, q2} its nothing but state A因此,生成的 DFA 的状态转换表如下:
| 状态\输入 | a | b |
|---|---|---|
| A | B | A |
| B | B | A |
DFA 图如下所示:

- 由于 A={q0,q1,q2} 中包含最终状态 q2,因此 A 是最终状态。
- 在 B ={q1,q2} 中包含状态 q2。因此,B 也是最终状态。
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP