【发布时间】:2015-12-21 11:53:02
【问题描述】:
【问题讨论】:
标签: regex finite-automata automata dfa automata-theory
【问题讨论】:
标签: regex finite-automata automata dfa automata-theory
不,有多种原因:
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 附加到空字符串会得到位于 (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
【讨论】:
b 和ab。获得状态q3 的唯一方法是查看单个a,它不在语言中,因此q3 不接受。 q4 是一种死状态,语言中的任何字符串都无法到达。