[英]Regular Expression to DFA
不,有多种原因:
bab
ab
关于第一点:从q1
开始,我们看到b
,到q2
,看到a
,到q3
,看到b
,再到q4
,这是接受。 我们看到了bab
并接受了它。
关于第二点:从q1
开始,我们看到a
但没有定义的转换。 自动机“崩溃”并且无法接受。 因此不接受以a
开头的字符串,包括ab
。
关于第三点:DFA 通常需要显示所有状态和转换,包括死状态和永远不会返回任何接受状态的转换。 您不会显示所有转换,也不会显示自动机中的所有状态。
您可以使用 Myhill-Nerode 定理来确定您的语言的最小 DFA 有多少个状态。 我们注意到空状态可以附加空字符串b
或ab
以获得语言中的字符串; a
可以附加b
; 并且b
可以附加空字符串。 不能将任何内容附加到aa
、 bb
或ba
以获取语言中的字符串(因此这些是无法区分的); 但ab
可以附加空字符串(因此与b
无法区分)。
如此确定的等价类对应于最小 DFA 中的状态。 我们的等价类是:
b
这样的字符串a
字符串aa
这样的字符串我们注意到b
在语言中,因此第二类将对应于接受状态。 我们注意到不能将任何内容附加到aa
以获取语言中的字符串,因此此类对应于 DFA 中的死状态。 我们通过查看附加新符号将我们置于哪个新等价类来编写这些状态之间的转换:
附加a
将我们置于 (3) 中,因为将a
附加到空字符串给出a
(3) 中的 a。 附加b
将我们置于 (2) 中,因为将b
附加到空字符串会得到位于 (2) 中的b
附加a
将我们置于 (4) 中,因为将a
附加到b
给出了ba
,这与aa
类似,因为它不是语言中任何字符串的前缀。 附加b
,我们通过类似的论点到达(4)。
附加a
我们得到aa
并且在 (4) 中。 附加b
我们得到ab
就像b
所以我们在(2)中。
所有从死状态的转换都返回到死状态; a
和b
都返回到 (4)。
你最终会得到类似的东西:
q1 --a--> q3
| /|
b --b--< a
| / |
vv v
q2 -a,b-> q4 \
^ a,b
\_/
或以表格形式:
q s q'
== = ==
q1 a q3
q1 b q2
q2 a q4
q2 b q4
q3 a q4
q3 b q2
q4 a q4
q4 b q4
您附加的 DFA 错误.. 您的 DFA 仅适用于 €,b,bab 但不能接受 ab。 为了让您的 dfa 接受 ab,还向 q0 添加一个新状态,它接受 a 并且每当 newstate 作为 b 获得输入时,将其发送到最终状态。 由于它是一个 dfa,因此您不需要将其发送到新状态(死亡状态)您的问题的 dfa 在这里:单击此处查看 dfa
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.