繁体   English   中英

创建确定性有限自动机

[英]Creating a deterministic finite automata

我需要通过具有以下属性的语言 {a,b,c} 创建一个非空 DFA:

  1. 第一个符号是a。
  2. 有偶数个b。
  3. 最后一个符号是 c。

我只是想知道,我应该创建 3 个单独的自动机,然后使用交叉点将它们组合起来,还是应该只创建一个,如果是这样,它怎么会有偶数个 b? 我知道我可以交替使用这些状态,但不知道如何将它们结合起来。

谢谢

这是您的自动机(假设0是偶数,因此0 b可以):

[start](a) -> [1]
[start](b,c,<eoi>) -> [reject]

[1](a) -> [1]
[1](<eoi>) -> [reject]

[1](c) -> [2]
[1](b) -> [3]

[2](<eoi>) -> [accept]
[2](c) -> [2]
[2](a) -> [1]
[2](b) -> [3]

[3](<eoi>) -> [reject]
[3](a,c) -> [3]
[3](b)->[1]

“输入结束”在哪里。

状态1:b的偶数,最后处理的符号不是c。 状态2:b的偶数,最后处理的符号是c。 状态3:b的奇数。

[在此处输入图片描述][1] 您需要的 DFA 显示在附图 [1] 中: https://i.stack.imgur.com/1K3Xw.jpg

现在让我们尝试了解 DFA 是如何构建的。 初始状态- 'q0' 现在我们在'q0' 上取a 来制作字符串'a' 的起始符号。 之后,我们要构建包含偶数个“b”的 DFA,因为我们在“q1”、“q2”上取 b。 我们所需的 DFA 的最后一个符号是“c”。 所以我们在'q3'上取'c'。 最终的 state 是“q4”。 现在我们看到每个 state 的转换。 在“q0”上,我们将字符串符号“a”作为起始符号,然后转到 state“q1”。 如果我们在 state 'q0' 上使用字符串符号 'b' 和 'c',我们将转到 state 'q5'。 如果我们在 state 'q1' 上取 'a','c',那么我们将留在同一个 state 'q1' 中。 现在我们在“q1”上取“b”,然后我们转到 state“q2”。 在构造 DFA 中,我们有奇数个“b”,即 1。但我们取偶数个“b”。 如果我们在 state 'q2' 上取 'a','c',那么我们将留在同一个 state 'q2' 中。 如果我们在 state 'q2' 上使用字符串符号 'b',那么我们将转到 state 'q3'。 如果我们在 state 'q3' 上取 'a',那么我们将留在同一个 state 'q3' 中。 如果我们在 state 'q3' 上取字符串符号 'b',那么我们将转到 state 'q2'。 如果我们在 state 'q3' 上取字符串符号 'c' ,那么我们将转到 state 'q4' ,这是最终的 state。 因为在那个 DFA 中,我们遵循我们需要的属性。 如果我们在 state 'q4' 上取字符串符号 'b',那么我们将转到 state 'q2'。 如果我们在 state 'q4' 上取字符串符号 'a',那么我们将转到 state 'q3'。 这是我们需要的 DFA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM