我怎样才能构建有限自动机

时间:2012-10-17 18:45:11

标签: finite-automata

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

1 个答案:

答案 0 :(得分:2)

  

我应该将0作为此字符串中的字符串包含吗?

  

我该怎么做?

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

在这个意义上,两个字符串xy无法区分,如果对于任何其他字符串z,则xzyz都在语言,或两者都不是。

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

字符串1怎么样?它可以与0和空字符串区分开来,因为您可以将10添加到1以获取110,这是该语言中的字符串,但您无法添加它到0或空字符串以获取语言中的字符串。所以我们还有另一个州。

字符串00怎么样?此字符串不在语言中,并且不能将其他字符串添加到此字符串以获取该语言中的字符串。这是另一个等价类。事实证明,下一个字符串0110也属于此类。

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

所以我们有四种状态 - 我们称之为[-][0][1][00]。现在我们找出转变。

如果您在0中获得[-],则需要转到[0] ...如果您获得1,则需要转到[1] 1}}。对于其余部分,只需通过添加到规范的字符串,以及结果字符串将在哪个类中...并进入该状态来确定您将获得的字符串。

相关问题