假设:
我不知道接受的语言是什么。
从查看它可以得到几个最终结果:
1.) bb
2.) ab(a,b)
3.) bbab(a, b)
4.) bbaaa
答案 0 :(得分:19)
在任何自动机中,状态的目的就像记忆元素。状态存储一些自动化信息,如ON-OFF风扇开关 确定性有限自动机(DFA)称为有限自动机,因为有限量的内存以状态的形式存在。对于任何常规语言(RL),DFA始终是可能的。
让我们看看存储在DFA中的信息(请参阅我的彩色图)
(注意:在我的解释中,任何数字表示零次或多次,Λ
为空符号)
状态-1:处于START状态,其中存储的信息偶数 a
已经到来。并且ZERO b
此状态的正则表达式(RE)为 = (aa)*
。
状态-4: a
的奇数已经到来。并且ZERO b
此状态的正则表达式为 = (aa)*a
。
图: a BLUE 状态= 偶数 a
的数量,以及 RED 状态= ODD a
的数量已经到来。
注意:首次 b 后,移动无法返回状态1和状态-4。
状态-5:在Yellow b
之后。 Yellow b
表示 b after odd numbers of a
在奇数 b
(在状态-5)后得到 a
后,每件事都可以接受,因为有一个自循环(b ,a)在州5。
您可以为州-5写:黄色-b后跟任何字符串a,b = Yellow-b
(a + b)*
状态-6:只是为了区分奇数 a
甚至是。
状态-2:甚至在 a
之后 b
,然后是任意数量的 { {1}} 即可。 = b
(aa)*
状态-3:在状态-2之后然后是bb*
,然后通过状态-6进行循环。
我们可以为州-3撰写 = a
state-2
a
= (aa)*
(aa)*bb*
{ {1}}
因为在我们的DFA中,我们有三个最终状态,因此DFA接受的语言是三个RL(或三个RE)的联合(+ RE)。
所以DFA接受的语言对应于三个接受状态-2,3,5 ,我们可以这样写:
a
(aa)*
+ State-2 + state-3 + state-5
(aa)*bb*
(aa)*bb*
+ a
(aa)*
我忘了解释Yellow-b
答案:(a + b)*
是状态-4或状态-3之后的how Yellow-b comes?
。我们可以这样写:
Yellow-b
= b
Yellow-b
= (( state-4 + state-3 )
+ b
{{1} } (aa)*a
)(aa)*bb*
[<强> ANSWER 强>]
a
+ (aa)*
b
(aa)*bb*
+((aa)*bb*
+ a
(aa)*
(aa)*a
)(aa)*bb*
a
英语语言描述:DFA接受三种语言的联合
(aa)*
的数量,一个或多个 b
(a + b)*
的数量,由一个或多个 a
跟进,由ODD跟进 b
的数量。 a
以及 b
的前缀字符串,其中 a
的奇数<&#> 39; s,由 a
跟进,由 b
和 a
的任意一串跟进的 b
即可。 英语描述很复杂,但这是描述语言的唯一方法。您可以通过首先将给定DFA转换为最小化DFA然后编写RE和描述来改进它。
此外,还有一种导数方法可以使用我在此处Arden's Therm解释的How to write regular expression for a DFA using Arden theorem从给定的转换图中查找RE。首先必须将转换图转换为没有空移动和单启动状态的标准形式。但我喜欢通过分析而不是数学推导方法来学习计算理论。
答案 1 :(得分:3)
我想这个问题不再相关了:)而且它可能更好地引导你完成它然后只是陈述答案,但我想我有一个基本的表达覆盖它(它可能是最小化的),所以我会只是为未来的搜索者写下来
(aa)*b(b)* // for stoping at 2
U
(aa)*b(b)*a(aa)* // for stoping at 3
U
(aa)*b(b)*a(aa)*b((a)*(b)*)* // for stoping at 5 via 3
U
a(aa)*b((a)*(b)*)* // for stoping at 5 via 4
答案 2 :(得分:1)
您提供的示例(1 - 4)是不 DFA接受的语言。它们只是属于DFA接受的语言的字符串。因此,它们都属于同一种语言。
如果你想找出定义DFA的正则表达式,你需要做一些叫做 k-path induction 的东西,你可以读一下它here