问题描述
如何将此 NFA 转换为 DFA :
“a”上的状态 [BC] 不会进入任何状态,因此它不会形成 DFA
解决方法
在您的图片中,有点不清楚哪些州正在接受。如果所有状态都接受,我们可以写出一个简单的 DFA,其中一个状态是等价的。因此,为了论证起见,我们假设可能只有其中一些状态接受。
因为 A 是起始状态,所以我们知道我们需要从状态 {A} 为字母表中的每个符号进行转换。我们找到 {A} --a--> {A,B,C},{A} --b--> {B,C} 和 {A} --c--> {C}。我们必须在 DFA 中引入三个新状态 - {A,C}、{B,C} 和 {C} - 我们也需要为这些状态进行转换。
对于 {A,C} 我们找到 {A,C} --a--> {A,{A,C} --b--> {B,C} 和 {A,C} --c--> {C}。这些状态已在我们的待办事项列表中,因此我们可以继续。
对于 {B,C} 我们找到 {B,C} --a--> {},{B,C} 和 {B,C} --c --> {C}。我们引入了一个与空集相对应的新状态,所以我们把它放在我们的待办事项列表中。
对于 {C},我们找到 {C} --a--> {}、{C} --b--> {} 和 {C} --c--> {C}。没有引入新的州。
最后,很明显 {} --a--> {}、{} --b--> {} 和 {} --c--> {}。
我们可以写下转换表如下:
q s q'
-------------------------
{A} a {A,C}
{A} b {B,C}
{A} c {C}
{A,C} a {A,C}
{A,C} b {B,C} c {C}
{B,C} a {}
{B,C} b {B,C}
{B,C} c {C}
{C} a {}
{C} b {}
{C} c {C}
{} a {}
{} b {}
{} c {}
根据原始 NFA 中接受的状态,这组状态可能不是最少的,但您可以根据接受的状态轻松地将其最小化。