从NFA到DFA的自动机转换

本文概述

  • 将NFA转换为DFA的步骤
在本节中,我们将讨论将NFA转换为其等效DFA的方法。在NFA中,当将特定的输入提供给当前状态时,机器将进入多个状态。在给定的输入符号上可以有零个,一个或多个移动。另一方面,在DFA中,当将特定输入提供给当前状态时,机器只会进入一个状态。 DFA在给定的输入符号上只可以移动一次。
令,M =(Q,∑,δ,q0,F)是一个接受语言L(M)的NFA。应该存在由M’ =(Q’ ,∑’ ,q0’ ,δ’ ,F’ )表示的等效DFA,以使L(M)= L(M’ )。
将NFA转换为DFA的步骤步骤1:最初,Q’ = ?
步骤2:将NFA的q0加到Q’ 。然后找到从此开始状态开始的过渡。
步骤3:在Q’ 中,找到每个输入符号的可能状态集。如果这组状态不在Q’ 中,则将其添加到Q’ 中。
步骤4:在DFA中,最终状态将是包含F(NFA的最终状态)的所有状态
范例1:
将给定的NFA转换为DFA。
从NFA到DFA的自动机转换

文章图片
解决方案:对于给定的过渡图,我们将首先构造过渡表。
01
→q00011
q1{q1, q2}11
*q222{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的过渡表将为:
01
→[q0][q0][q1]
[q1][q1, q2][q1]
*[q2][q2][q1, q2]
*[q1, q2][q1, q2][q1, q2]
转换图将为:
从NFA到DFA的自动机转换

文章图片
因为q2是不可达状态,所以可以消除状态q2。
范例2:
将给定的NFA转换为DFA。
从NFA到DFA的自动机转换

文章图片
解决方案:对于给定的过渡图,我们将首先构造过渡表。
01
→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的过渡表将为:
01
→[q0][q0, q1][q1]
*[q1]?[q0, q1]
*[q0, q1][q0, q1][q0, q1]
转换图将为:
从NFA到DFA的自动机转换

文章图片
甚至我们都可以更改DFA状态的名称。
假设
A = [q0] B = [q1] C = [q0, q1]

【从NFA到DFA的自动机转换】使用这些新名称,DFA将如下所示:
从NFA到DFA的自动机转换

文章图片

    推荐阅读