我想要DFA生成,它将接受具有奇数为1和奇数为0 的字符串。
答案 0 :(得分:0)
首先,让我们构建一个接受0的奇数的DFA。我们需要至少一个状态,否则我们什么都不能接受。该状态不能被接受,因为空字符串在那开始,并且空字符串的奇数不为0。因此,我们至少需要两个状态-一个不接受的初始状态和一个接受状态。我们需要更多吗?
要回答这个问题,让我们开始填写过渡,看看我们从哪里得到。必须存在始于接受状态的过渡。去哪儿了?如果它本身,那么我们将不接受字符串0,该字符串的奇数(一)为0。因此,在初始状态下,我们需要在0上进入某种接受状态。我们恰好已经有了一个接受状态。我们去那里吧。
接下来,我们必须从接受状态过渡。如果返回到接受状态,我们将接受字符串00,因此不能这样做。我们必须过渡到某种不可接受的状态。我们已经有一个不接受状态-我们的初始状态-因此选择可能会起作用。或者,如果没有,我们必须引入一个新状态。让我们首先考虑返回初始状态是否可行,因为在这种情况下我们已经完成了。
我们已经推理出正确处理了字符串0和00。从那时起,000将被正确处理,因为我们从随后的0的初始状态返回到接受状态;实际上,对于k> = 0,我们在0 ^ 2k返回初始状态,在0 ^(2k + 1)返回接受状态。因此,此DFA对于奇数0的字符串语言是正确的。图如下:
/---0----\
| |
V |
----->(q0)--0-->(q1)
通过更改标签,我们可以得到奇数为1的字符串的语言的自动机。
/---1----\
| |
V |
----->(q2)--1-->(q3)
要使一个自动机接受包含0和1的奇数的字符串,请想象同时运行两个自动机:每当看到0时,便将其传递给第一个,而每当看到1时,便将其传递给第二个。然后,我们接受两个自动机是否都处于接受状态。我们可以通过将第一自动机和第二自动机的所有四对状态视为新的组合自动机的状态来表示两个自动机的组合状态,其过渡图如下所示:
/----0----\
| |
V |
----->(q0,q2)--0-->(q1,q2)
^ | ^ |
| 1 | 1
1 | 1 |
| V | V
(q0,q3)--0-->(q1,q3)
^ |
| |
\----0----/
这些是有关语言正则性的Myhill-Nerode定理和正则语言交集的笛卡尔积机器构造背后的直觉。
答案 1 :(得分:0)