构建一个只接受单词 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 到终端状态的过渡有点松懈。如果你需要我全部填写,我可以做到。
为了完成一项大学作业,我已经尝试解决这个问题一段时间了。我需要为上述问题建立一个 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 到终端状态的过渡有点松懈。如果你需要我全部填写,我可以做到。