状态机,字符串集?

时间:2012-06-23 01:16:26

标签: state-machine

我正在做一个处理状态机的家庭作业。我理解它们是如何运作的,但是我不理解这个特定问题的几个方面。

Let L be the set of strings over {a,b} ending with the substring abba.
a. Build a DFA that accepts L.
b. Build an NFA with 6 transitions that accepts L.

如何将L合并到状态机中? 我完全迷失了b部分,但我觉得一旦我理解了a部分,b就不会太难了。

2 个答案:

答案 0 :(得分:1)

让我们稍微回顾一下。按照惯例,“L”用于定义“语言” - 在此上下文中是满足某些定义的一组(可能是无限的)字符串。当玩有限自动机时,你关心的是机器“接受”哪些字符串以及哪些字符串被“拒绝”&通常你想接受给定语言中的所有字符串&拒绝那些不在其中的人(另一种看问题的方法是你可以将一种语言定义为机器接受的所有字符串的集合 - 它们是等价的。)

第一个问题是构建一个接受L的DFA的练习 - 即,任何以“aaba”结尾的字符串,它接受&给定的字符串不以“abba”结尾,它拒绝。你的困惑似乎来自于认为L不知何故是你机器的“一部分”;最好将L的描述编码到您的机器中。

第二个问题是要求你用NFA做同样的事情,另外一个限制是它只有6个过渡。

答案 1 :(得分:0)

让我试一试:

Node 0:
a -> node 1   <-- This means, "if the next character is a, then go to node 1"
b -> node 0
END -> error
Node 1:
a -> node 1
b -> node 2
END -> error
Node 2:
a -> node 1
b -> node 3
END -> error
Node 3:
a -> node 4
b -> node 0
END -> error
Node 4:
END -> Success!
a -> node 1
b -> node 0

我相信应该这样做。对于a,b或字符串结尾(END),每个节点都有3个可能的箭头。作为“abbaEND”一部分的每个输入都会导致下一个节点并最终成功,并且不属于“abbaEND”的每个输入都会将您带回适当的节点。基本上,如果它是a,它将它视为另一个“abba”块的开始,如果它是b,则假定“abba”接下来。早期的END是失败的。那应该是你的DFA地图。

所以,使用a和b的任何字符串作为输入......这个DFA应该只在成功结束!如果字符串以“abba”结尾,并且对于任何其他字符串应该以错误结束。