FInite自动机到正则表达式澄清

时间:2012-11-23 06:20:03

标签: automata

您可以查看:https://dl.dropbox.com/u/25439537/finite%20automata.png

这是一个检查过的作业,所以不用担心。我只想澄清我的答案是否正确,因为我的老师将其标记为不正确。

我的回答是((a + b)(a + b))* a 第一个(a + b)表示上箭头。第二个(a + b)表示下箭头。最后一个'a'告诉我们它应该总是以'a'结尾。

我只是想记录很多专家的证据,以便我可以把它交给老师。

2 个答案:

答案 0 :(得分:0)

我相信你的回答是正确的。

让我们将整个过程视为两个部分:(1)从start开始,然后返回start; (2)从start转到end并接受。显然,(1)部分是一个循环。

对于(1),从start开始,接受ba。对于b,可以返回b(a+b)。对于a,可以返回a(a+b)。所以(1)是b(a+b) + a(a+b)(a+b)(a+b)

对于(2),它是a'。

因此,最终结果为(loop in (1))* (2),即( (a+b)(a+b) )* a

按照上面的描述,您还可以提供两者之间等效性的证明。证明部分(a)自动机接受的每个序列都在集((a+b)(a+b))*a中; (b)集合((a+b)(a+b))*a中的每个序列都被自动机接受。

答案 1 :(得分:0)

您的回答错误,因为它没有提供以 b 开头的字符串。

路径(开始) - > b - > a + b - > a - > (结束)被你的有限自动机接受,但不是你的正则表达式。答案正确的最简单的反例是正则表达式拒绝字符串“baba”。

顺便说一句,如果老师给你的正则表达式没有“结束”状态有两个同心圆(表示是接受状态),这可能是一个技巧问题。没有接受状态意味着你的自动机拒绝一切。描述它的最好方法是写下{}(空集)。

相关问题