关于状态消除和术语,我有几个问题。
在上面的示例中,DFA处于接受状态,您必须以符号0开头并以1结尾。
这是我的问题,我不知道如何在单个表达式中添加顶部和底部。我也不完全确定如何进一步消除q2符号1。
会是0(0 *(0 + 1))1 *吗?
感谢任何可以帮助您的人!
答案 0 :(得分:0)
有一种更广为人知且可理解的算法可以完成此任务。
要将DFA G转换为正则表达式,我们首先将G转换为'GNFA'。例如,假设G是以下DFA(q是开始状态):
将DFA转换为GNFA的过程如下:
这是生成的GNFA:
然后,我们一次删除一个新的开始状态和一个新的接受状态之间的每个状态,调整图表以保持正确性。该过程的工作方式如下:令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会发生转变。
这是我们完整的正则表达式。使用此过程可以完全避免您面临的任何问题。但是,我也会为您提供直接答案。对于初学者来说,上面的部分不是您建议的。相反,它将变成:简化为: 这是我们最终的正则表达式,因为底部没有接受状态,因此无关紧要。
答案 1 :(得分:0)
如果u输入(0),则从(q0)状态开始,然后可以到达最终状态;相反,如果u输入(1),则无法到达final。所以只考虑州 (q0)(q1)(q2)并在这些状态上应用消除规则
消除后的RE如下
0(0)*1 . (1+0(0)*1)*
从0开始到1结束