将DFA排除为正则表达式

时间:2018-12-04 08:15:46

标签: regex regular-language finite-automata dfa

关于状态消除和术语,我有几个问题。

enter image description here

在上面的示例中,DFA处于接受状态,您必须以符号0开头并以1结尾。

如果我将其转换为正则表达式,则上限为 enter image description here

,底部将是 enter image description here

这是我的问题,我不知道如何在单个表达式中添加顶部和底部。我也不完全确定如何进一步消除q2符号1。

会是0(0 *(0 + 1))1 *吗?

感谢任何可以帮助您的人!

2 个答案:

答案 0 :(得分:0)

有一种更广为人知且可理解的算法可以完成此任务。

要将DFA G转换为正则表达式,我们首先将G转换为'GNFA'。例如,假设G是以下DFA(q是开始状态):

enter image description here

将DFA转换为GNFA的过程如下:

  1. 将带有epsilon过渡的新启动状态添加到原始启动状态。
  2. 添加新的接受状态,添加从每个原始接受状态到新添加的接受状态的epsilon转换,然后使所有原始接受状态变为正常状态。

这是生成的GNFA:

enter image description here

然后,我们一次删除一个新的开始状态和一个新的接受状态之间的每个状态,调整图表以保持正确性。该过程的工作方式如下:令x,y和z为DFA中的状态。另外,转换如下:输入a上的x-> y,输入b上的y-> y和输入c上的y-> z。假设我们要删除y。对于从某个节点n到y的每个过渡以及从y到m的每个过渡,我们必须添加一个新的过渡n-> m。从n到m的过渡将是从n到y的过渡的内容,然后是带有kleene星的过渡y-> y的内容,然后是从y-> m的过渡的内容。在这种情况下,a上的x-> y,b上的y-> y和c上的y-> z,在删除状态y之后,a(b*)c上的x-> z会发生转变。


在图像中考虑我们的DFA。删除状态q后,我们得到: enter image description here

删除状态r后,我们得到: enter image description here

最后,在删除状态s之后,我们得到: enter image description here

这是我们完整的正则表达式。使用此过程可以完全避免您面临的任何问题。但是,我也会为您提供直接答案。对于初学者来说,上面的部分不是您建议的。相反,它将变成:enter image description here简化为:enter image description here 这是我们最终的正则表达式,因为底部没有接受状态,因此无关紧要。

答案 1 :(得分:0)

如果u输入(0),则从(q0)状态开始,然后可以到达最终状态;相反,如果u输入(1),则无法到达final。所以只考虑州 (q0)(q1)(q2)并在这些状态上应用消除规则

消除后的RE如下

0(0)*1 . (1+0(0)*1)*

从0开始到1结束