NFA接受以下语言

时间:2020-03-29 13:37:58

标签: numbers automata finite-automata dfa nfa

我需要构建NFA(或DFA)以识别以下语言: L = {w | w mod 3 = 1}。 因此,我尝试的方法是使NFA识别被3整除的数字,然后将其加1,但是这种方法比看起来要难得多(如果不是不可能的话)。 我只能做一个NFA来识别被3整除的数字。

1 个答案:

答案 0 :(得分:1)

我将假定w被解释为非负整数的十进制表示形式(不带前导零)。

鉴于此,我们可以使用Myhill-Nerode迭代确定所需的状态:

  1. 空字符串可以跟在L中的任何字符串之后,以到达L中的字符串。我们将为此[e]调用等价类。请注意,此等价类对应于L的最小DFA的初始状态(如果存在)。还请注意,由于空字符串不是非负整数的有效十进制表示形式,因此初始状态不接受。

  2. 字符串0后面不能有任何字符来获取L中的字符串;会导致对应于等价类[0]的失效状态。

  3. 字符串1、4和7在L中,因此它们必须对应于新状态。我们将这些的等效类称为[1]。

  4. 字符串2、5和8不在L中;但是,不是L中的所有字符串都导致它们指向L中的字符串。这些必须与我们称为[2]的新的等效类相对应。

  5. 字符串3、6和9不在L中;但是这些后面可以跟L中的任何内容以得到L中的字符串。这与空字符串相同,因此我们不需要新的等效类或状态:等效类为[e]。

  6. 可以验证每个两位十进制字符串与上面的某个一位十进制字符串是无法区分的。因此,不需要新的等效类或状态。

要确定过渡,只需将过渡符号附加到等效类的代表元素上,然后查看结果字符串所属的等效类:过渡将在此终止。例如,从0的[e]到[0]过渡,从1的[e]到[1]过渡,等等。

由于10 = 1(模3),在十进制字符串的末尾添加一个新数字将导致新值模3为原始数字模3值与新数字模3值的和。 :

x = a (mod 3)
y = b (mod 3)
x * 10 = x * 1 (mod 3) since 10 = 1 (mod 3)
x . y = x * 10 + y = x * 1 + y = x + y (mod 3)

在过渡中填充作为练习。

相关问题