构造与非确定性自动机相等的确定性有限自动机

时间:2019-01-30 16:02:06

标签: automata finite-automata deterministic automaton

在将非确定性自动机转换为确定性有限自动机的步骤中,我遇到了麻烦。下面是有问题的问题,在这里我需要构造一个与所示非确定性自动机相等的确定性有限自动机。对于解决此类问题,特别是解决该问题的步骤的任何帮助,将不胜感激。

The problem

这是NFA的过渡表:

 Q | s | Q'
===|===|===
q0 | a | q0
q0 | b | q0
q0 | b | q2
q0 | - | q1
q1 | b | q2
q1 | b | q4
q2 | a | q3
q3 | - | q4
q4 | a | q3

q3和q4正在接受,并且q0是初始状态。 s列中的-表示Episilon / lambda过渡。

1 个答案:

答案 0 :(得分:0)

状态集Q为{q0,q1,q2,q3,q4}。等效DFA的状态将从NFA的所有状态子集的集合中提取,其中有2^5 = 32。其中一些可能无法实现,因此我们只能介绍实际达到的目标。

DFA中的初始状态将是包含q0以及仅通过epsilon / lambda转换可从q0到达的任何状态的NFA状态的子集。在这里,DFA的初始状态为{q0,q1},因为q0是NFA的初始状态,并且仅通过遍历(恰好是一个)ε/λ跃迁就可以从q0到达q1。

现在,我们需要进行转换,以使字母中的每个符号a和b都保持状态{q0,q1}。 {q0,q1}转换为输入a时的状态是所有状态的子集,其中仅包含通过消耗正好一个a并遍历任意多个epsilon / lambda转换而在NFA中从q0或q1可达的那些状态。符号a使NFA过渡到q0(如果已经在q0中),并且可以通过遍历epsilon / lambda过渡从q0到达q1;所以q0和q1将在下一个状态对应的子集中。由于NFA中的q1不会在a上转换,因此此状态不会添加任何内容:{q0,q1}在输入a上转换为{q0,q1}。在输入b上,q0转换为自身,并在NFA中转换为q2(也转换为q1,因为通过epsilon / lambda转换可从q0到达q1)。在NFA中,q1转换为NFA中的q4和q2,因此这些状态也在我们的状态所对应的子集中。因此,{q0,q1}在输入b上转换为{q0,q1,q2,q4}。

我们遇到的唯一缺少过渡的状态是{q0,q1,q2,q4}。在输入b上,我们能够从其他状态到达每个状态(通过从q0转换到q0后进行epsilon / lambda转换来达到q1);但是无法达到q3。因此,{q0,q1,q2,q4}在输入b上转换为其自身。在输入a上,我们可以从q0到达q0(因此为q1);从q1什么都没有;和q3(因此通过epsilon / lambda过渡而变成q4)来自q2或q4。因此,{q0,q1,q2,q4}在输入a上转换为{q0,q1,q3,q4}。

我们遇到的唯一缺少过渡的状态是{q0,q1,q3,q4}。在输入a上,确认我们达到相同的状态{q0,q1,q3,q4}。在输入b上,确认我们达到状态{q0,q1,q2,q4}。

没有任何国家需要我们进行过渡。现在,我们可以枚举状态,为它们指定较短的名称:{q0,q1}是A; {q0,q1,q2,q4}是B; {q0,q1,q3,q4}是C。现在,转换表如下:

 Q | s | Q'
===|===|===
 A   a   A
 A   b   B
 B   a   C
 B   b   B
 C   a   C
 C   b   B

接受状态将是与包含在NFA中接受的NFA状态的子集相对应的任何状态:q3或q4。状态B和C都包含状态q4,该状态在NFA中正在接受;所以B和C都接受。语言是包含至少一个b的所有字符串的语言。要了解这是正确的语言,请考虑使用NFA。

  • 任何带有至少一个b的字符串都必须最后出现一次b,此后如果字符串以b结尾,则该字符串除a外(或完全不包含)。
  • 通过循环NFA中的状态q0,到目前为止可以使用任何字符串
  • 然后,可以将epsilon / lambda转换设为q1
  • 然后,可以使用字符串中的最后一个b过渡到q4
  • 从那时起,所有剩余的a(如果有)都可以被消耗
  • 必须消耗至少一个b才能从q1到达q4或到达q2到达q3。

此DFA并非最低标准,该语言有两种状态的DFA:

 Q | s | Q'
===|===|===
 X | a | X
 X | b | Y
 Y | a | Y
 Y | b | Y

如果X是初始状态,Y是接受状态,则接受相同的语言。