需要构造DFA(确定性有限自动机)

Need to construct DFA (deterministic finite automaton)

我需要构建一个 DFA,它可以识别仅由 0 和 1 组成的所有字符串,以便它们具有偶数个零和可被 3 整除的 1。我找到了一个用于偶数情况的自动机0 和偶数个 1:

我尝试通过添加一些状态、更改分支等从这里开始。但是我仍然没有成功,通常因为我要添加的分支和状态而忘记了自动机在做什么。任何帮助将不胜感激。

您需要记录被 2 和 3 整除的状态,这意味着您需要 6 个状态。只需将它们命名为 0|01|00|11|10|21|2。第一个数字告诉您,当您达到该状态时,您有偶数或奇数个零,第二个数字告诉您,当您达到该状态时,您有多个 1,除以 3 时,给出给定的模数。

您的状态图包含:

0|x   --0-->   1|x
1|x   --0-->   0|x 
y|0   --1-->   y|1
y|1   --1-->   y|2
y|2   --1-->   y|0

开始状态是0|0,也是唯一的停止状态

要理解的重要一点是,每个状态记录分别除以 2 或 3 时读取的 0 或 1 的数量的模数。在这两种情况下,0|0 都是模数 0,即接受标准。这一切都有效,因为要跟踪的不同状态的数量是有限的。 DFA 这个名字已经告诉我们它无法跟踪无限数量的状态。

一种看待它的方法是问题要求两种语言的交集:一种包含偶数个零,另一种包含可被 3 整除的 1 的数量。解决这个问题的一种方法是为 DFA 制作两种语言,然后制作另一个 DFA,在读取输入符号时跟踪每个 DFA 中的状态对。

I have used 'e' and 'o' to denote that the number of zeroes is even or odd respectively. The second digit in each of the states defines the remainder obtained by dividing the number of ones by 3.