繁体   English   中英

将DFA排除为正则表达式

[英]State Elimination DFA to Regular Expression

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

在此处输入图片说明

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

如果我将其转换为正则表达式,则上限为 在此处输入图片说明

而底部将是 在此处输入图片说明

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

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

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

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

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

在此处输入图片说明

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

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

这是生成的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*)ca(b*)c x-> z会发生转变。


在图像中考虑我们的DFA。 删除状态q后,我们得到: 在此处输入图片说明

删除状态r后,我们得到: 在此处输入图片说明

最后,在删除状态s之后,我们得到: 在此处输入图片说明

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

您从(q0)状态开始,如果u输入(0),则可以到达最终状态; 相反,如果u输入(1),则无法到达final。 因此,仅考虑状态(q0)(q1)(q2),并对这些状态应用消除规则

消除后,RE将如下

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

从0开始到1结束

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM