您可以查看:https://dl.dropbox.com/u/25439537/finite%20automata.png
这是一个检查过的作业,所以不用担心。我只想澄清我的答案是否正确,因为我的老师将其标记为不正确。
我的回答是((a + b)(a + b))* a 第一个(a + b)表示上箭头。第二个(a + b)表示下箭头。最后一个'a'告诉我们它应该总是以'a'结尾。
我只是想记录很多专家的证据,以便我可以把它交给老师。
答案 0 :(得分:0)
我相信你的回答是正确的。
让我们将整个过程视为两个部分:(1)从start
开始,然后返回start
; (2)从start
转到end
并接受。显然,(1)部分是一个循环。
对于(1),从start
开始,接受b
或a
。对于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 - > a + b - > a - > (结束)被你的有限自动机接受,但不是你的正则表达式。答案正确的最简单的反例是正则表达式拒绝字符串“baba”。
顺便说一句,如果老师给你的正则表达式没有“结束”状态有两个同心圆(表示是接受状态),这可能是一个技巧问题。没有接受状态意味着你的自动机拒绝一切。描述它的最好方法是写下{}(空集)。