构建一个仅接受单词 baa、ab 和 abb 而没有其他更长或更短字符串的 FA 我的 DFA 针对上面提供的语言的解决方案:我的第一次尝试:我的第二次尝试:我的第三次尝试:

问题描述

我一直在尝试解决这个问题,因为这是一项大学作业。我需要为上述问题构建一个 DFA 和一个 NFA。到目前为止,我已经能够解决 DFA,但经过多次尝试,找不到适合 NFA 的解决方案。

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

The solution of my DFA for the language provided above:

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

我的第一次尝试:

My first attempt at solving the NFA

我的第二次尝试:

My second attempt at solving the NFA

我的第三次尝试:

My third attempt at solving the NFA

解决方法

只有三个词,所以只需为您的 NFA 制作三个平行路径,使用如下所示的转换函数:

输入状态 输入符号 输出状态
[开始] [a.b],[a.bb]
[开始] b [b.aa]
[a.b] b [ab#]
[a.bb] b [ab.b]
[ab.b] b [abb#]
[b.aa] [ba.a]
[ba.a] [baa#]

此处,状态名称在方括号 ([..]) 中,以“#”结尾的状态名称是终结符。

通常认为制作 NFA 比制作 DFA 更容易,因此通常的方法是先制作 NFA,然后通过将多个输出状态更改为单个中间状态来修改 NFA 制作 DFA。

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

输入状态 输入符号 输出状态
[开始] [a.b*]
[开始] b [b.aa]
[a.b*] b [ab.*]
[ab.*] (e) [ab#]
[ab.*] b [abb.*]
[abb.*] (e) [abb#]
[b.aa] [ba.a]
[ba.a] [baa#]

我对所有空符号/输入结束转换到终止状态有点松散。如果您需要我填写所有内容,我可以这样做。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...