2

我正在学习计算机科学专业的高级理论课程,并​​负责设计 NFA。如果我没记错的话,如果 NFA 中的任何路径可以获取字符串并进入接受状态,则 NFA 接受输入。我理解并且可以很好地创建 DFA,并且理解 NFA 需要表达在等效 DFA 中明显更大的问题。但我对 NFA 接受某些东西的具体程度感到有些困惑。

例如,我的一个作业问题如下:

为 {wxw^R | 给出一个 NFA x ∈ {0, 1}∗, w ∈ {0, 1}^2},

其中,如果我正确解释了这一点,w^R 是字符串 w 的倒数,x 是任意长度的二进制字符串,w 是“00”、“01”、“10”、“11”。

所以本质上 NFA 会接受一个以 w 开头的字符串,有一些字符串 x,然后以 w 的倒数结尾。

我已经正确设计了,尽管在之前的作业中为此设计了非常大的 DFA,但我确定的练习是教我 NFA 在某些情况下比 DFA 更易于使用。我想出了这样的答案:

http://s1056.photobucket.com/user/pcd132/media/Untitled_zps4317347c.jpg.html

这个 NFA 几乎接受任何非空二进制字符串,那么它是否满足这个问题?我只是对如果它以某种方式接受某些东西,它应该被接受的概念感到困惑。或者我应该以某种方式只接受条件而不接受其他方式来构建它?如果我不理解这一点,感谢您的帮助和澄清。

4

1 回答 1

0

您将希望 NFA 接受您语言中的所有字符串,并且只接受您语言中的字符串。仅一种或另一种是不够的(因为 E* 的 NFA 足以获取所有字符串,而不接受任何内容的 NFA 足以仅获取字符串)。

有很多方法可以为这种语言生成 NFA。一种方法是首先添加 7 个状态,这些状态采用所有 4 个长度为 2 的二进制字符串。每个状态都在 0 或 1 上循环到自身以接受任何 x,然后以开始构造 w^ 的方式移动到唯一状态R。这些状态中的每一个依次以完成 w^R 并接受的方式移动到接受状态。

于 2016-06-24T18:12:40.370 回答