构建一个只接受单词 baa、ab 和 abb 而没有其他更长或更短的字符串的 FA

Build an FA that accepts only the words baa, ab, and abb and no other strings longer or shorter

为了完成一项大学作业,我已经尝试解决这个问题一段时间了。我需要为上述问题建立一个 DFA 和一个 NFA。到目前为止,我已经能够解决 DFA,但在多次尝试后找不到合适的 NFA 的解决方案。

我的DFA针对上面提供的语言的解决方案:

我对 NFA 的尝试如下。我为我乱七八糟的笔迹道歉,但这些只是我在旅途中画的粗略作品。

我的第一次尝试:

我的第二次尝试:

我的第三次尝试:

只有三个词,所以只需为您的 NFA 创建三个并行路径,使用如下转换函数:

Input State Input Symbol Output States
[start] a [a.b], [a.bb]
[start] b [b.aa]
[a.b] b [ab#]
[a.bb] b [ab.b]
[ab.b] b [abb#]
[b.aa] a [ba.a]
[ba.a] a [baa#]

此处,州名在方括号([..])中,州名以“#”结尾。

一般认为制作NFA比制作DFA更容易,所以通常的做法是先制作NFA,然后通过将多个输出状态变为单个中间状态来修改NFA制作DFA。

如果您对上述 NFA 使用此方法,那么生成的 DFA 将如下所示(我在中间状态名称后附加了“*”):

Input State Input Symbol Output State
[start] a [a.b*]
[start] b [b.aa]
[a.b*] b [ab.*]
[ab.*] (e) [ab#]
[ab.*] b [abb.*]
[abb.*] (e) [abb#]
[b.aa] a [ba.a]
[ba.a] a [baa#]

我对所有空的 symbol/end-of-input 到终端状态的过渡有点松懈。如果你需要我全部填写,我可以做到。