繁体   English   中英

如何构造有限自动机

[英]How can I construct finite automata

我必须创建一个确定性有限自动机,接受偶数为 1 并以 0 结尾的字符串集。我应该将 0 作为该集合中的字符串包含在内吗? 我该怎么做?

我应该包含0作为这个集合中的字符串吗?

是的

我该怎么做?

要构造有限自动机,您需要识别状态和转移。 如果您能够识别“不可区分”字符串的等价类,Myhill-Nerode 定理允许您找到有限自动机的必要(和充分)状态。

两个字符串xy是无法区分的,从这个意义上说,如果对于任何其他字符串zxzyz都在该语言中,或者两者都不是。

在您的情况下,让我们尝试识别等价类。 空字符串与 class 等价。 字符串0在不同的等效 class 中,因为您可以将空字符串添加到0并获取该语言的字符串(而您不能将空字符串添加到空字符串以获取该语言的字符串)。 到目前为止,我们已经找到了两个不同的等价类 - 一个用于空字符串,一个用于0 在我们的 FA 中,这两者都需要不同的状态。

那么字符串1呢? 它可以与0和空字符串区分开来,因为您可以将10添加到1以获得110 ,该语言中的字符串,但您不能将其添加到0或空字符串以获取该语言中的字符串。 所以我们还有另一个 state。

那么字符串00呢? 该字符串不在该语言中,并且不能将其他字符串添加到该字符串中以获得该语言的字符串。 这是另一个等价的 class。 事实证明,接下来的字符串0110也在这个 class 中。

字符串11最终与空字符串位于相同的 class 中:您可以将语言中的任何字符串添加到11并获取该语言中的另一个字符串。 如果您尝试所有长度为 3 的字符串,您会发现所有这些都已属于上述类别之一,您可以在此时停止检查。

所以我们有四种状态——我们称它们为[-][0][1][00] 现在我们找出过渡。

如果在[-]中得到0 ,则需要将 go 更改为[0] ...如果得到1 ,则需要将 go 更改为[1] For the rest, just figure out what string you'd get by adding to the canonical one, and which class the resulting string would be in... and go to that state.

给定的问题是构造一个偶数个 1 并以 0 结尾的有限自动机。所以语言的字母表是 {0,1} 这些是语言接受的字符串。 该语言在其最终 state 之前始终由“0”组成,因为它是字符串的结尾,当我们到达字符串中的最后一个“0”时,我们会到达最终的 state。 在将其转换为有限自动机的正常过程中,我们得到NFA

然后我们需要将 NFA 转换为 DFA,方法是将 2 个状态合并为单个状态并简化它们。 新的过渡图

在这里,我们根据特定 state 在给定输入处达到的状态绘制了新的转换图。 然后通过连接 2 个状态形成的新状态 [这里 {q0,q2} state 形成] 这个新的 state {q0,q1} on 0 作为输入进入自身(因为 0 上的 q0 去 q0 和 0 上的 q2 去 q2 )。

因此,让我们将这个新的 state {q0,q2} 视为新的 state q2'

所以通过使用Transition state图我们可以轻松制作所需的DFA

确定性有限自动机上图是构造的有限自动机,它接受偶数个 1 并以 0 结尾的字符串集合。

q0 - 是初始 state

q2'- 是最终的 state

暂无
暂无

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

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