有人可以告诉我附加的 DFA 是否正确吗?
我想为具有字母 Σ ={a, b} 的语言提供 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)中的内容。附加b
将我们置于(2)中,因为附加b
到空字符串会给出b
(2)中的
追加a
将我们置于 (4) 中,因为追加a
to就像b
它不是语言中任何字符串的前缀一样。附加,我们通过类似的论点到达(4)。ba
aa
b
附加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