📅  最后修改于: 2020-12-17 06:54:00             🧑  作者: Mango
在本节中,我们将讨论将NFA转换为其等效DFA的方法。在NFA中,当将特定的输入提供给当前状态时,机器将进入多个状态。在给定的输入符号上,它可以有零个,一个或多个移动。另一方面,在DFA中,当将特定输入提供给当前状态时,机器只会进入一个状态。 DFA在给定的输入符号上仅可移动一次。
令,M =(Q,∑,δ,q0,F)是一个接受语言L(M)的NFA。应该存在由M'=(Q',∑',q0',δ',F')表示的等效DFA,以使L(M)= L(M')。
步骤1:最初,Q'= ϕ
步骤2:将NFA的q0加到Q'。然后找到从此开始状态开始的过渡。
步骤3:在Q'中,找到每个输入符号的可能状态集。如果这组状态不在Q'中,则将其添加到Q'中。
步骤4:在DFA中,最终状态将是所有包含F的状态(NFA的最终状态)
将给定的NFA转换为DFA。
解决方案:对于给定的过渡图,我们将首先构造过渡表。
State | 0 | 1 |
---|---|---|
→q0 | q0 | q1 |
q1 | {q1, q2} | q1 |
*q2 | q2 | {q1, q2} |
现在我们将获得状态q0的δ'跃迁。
δ'([q0], 0) = [q0]
δ'([q0], 1) = [q1]
状态q1的δ'转换为:
δ'([q1], 0) = [q1, q2] (new state generated)
δ'([q1], 1) = [q1]
状态q2的δ'转换为:
δ'([q2], 0) = [q2]
δ'([q2], 1) = [q1, q2]
现在我们将在[q1,q2]上获得δ'跃迁。
δ'([q1, q2], 0) = δ(q1, 0) ∪ δ(q2, 0)
= {q1, q2} ∪ {q2}
= [q1, q2]
δ'([q1, q2], 1) = δ(q1, 1) ∪ δ(q2, 1)
= {q1} ∪ {q1, q2}
= {q1, q2}
= [q1, q2]
状态[q1,q2]也是最终状态,因为它包含最终状态q2。构造的DFA的过渡表将为:
State | 0 | 1 |
---|---|---|
→[q0] | [q0] | [q1] |
[q1] | [q1, q2] | [q1] |
*[q2] | [q2] | [q1, q2] |
*[q1, q2] | [q1, q2] | [q1, q2] |
转换图将为:
由于q2是不可访问状态,因此可以消除状态q2。
将给定的NFA转换为DFA。
解决方案:对于给定的过渡图,我们将首先构造过渡表。
State | 0 | 1 |
---|---|---|
→q0 | {q0, q1} | {q1} |
*q1 | ϕ | {q0, q1} |
现在我们将获得状态q0的δ'跃迁。
δ'([q0], 0) = {q0, q1}
= [q0, q1] (new state generated)
δ'([q0], 1) = {q1} = [q1]
状态q1的δ'转换为:
δ'([q1], 0) = ϕ
δ'([q1], 1) = [q0, q1]
现在我们将在[q0,q1]上获得δ'跃迁。
δ'([q0, q1], 0) = δ(q0, 0) ∪ δ(q1, 0)
= {q0, q1} ∪ ϕ
= {q0, q1}
= [q0, q1]
同样,
δ'([q0, q1], 1) = δ(q0, 1) ∪ δ(q1, 1)
= {q1} ∪ {q0, q1}
= {q0, q1}
= [q0, q1]
就像在给定的NFA中一样,q1是最终状态,然后在DFA中无论哪里存在,q1都将成为最终状态。因此,在DFA中,最终状态为[q1]和[q0,q1]。因此,最终状态集F = {[q1],[q0,q1]}。
构造的DFA的过渡表将为:
State | 0 | 1 |
---|---|---|
→[q0] | [q0, q1] | [q1] |
*[q1] | ϕ | [q0, q1] |
*[q0, q1] | [q0, q1] | [q0, q1] |
转换图将为:
甚至我们都可以更改DFA状态的名称。
假设
A = [q0]
B = [q1]
C = [q0, q1]
使用这些新名称,DFA将如下所示: