我必须创建一个确定性有限自动机,接受偶数为1的字符串集,并以0结尾。我应该从该集合中包含0作为字符串吗?我该怎么做?
答案 0 :(得分:2)
我应该将
0
作为此字符串中的字符串包含吗?
是
我该怎么做?
要构造有限自动机,您需要识别状态和转换。 Myhill-Nerode定理允许您找到有限自动机的必要(和足够!)状态,如果您能够识别“无法区分”字符串的等价类。
在这个意义上,两个字符串x
和y
无法区分,如果对于任何其他字符串z
,则xz
和yz
都在语言,或两者都不是。
在您的情况下,让我们尝试识别等价类。空字符串在某个等价类中。字符串0
位于不同的等效类中,因为您可以将空字符串添加到0
并获取该语言中的字符串(而您不能将空字符串添加到空字符串中以获取语言中的字符串)。到目前为止,我们已经找到了两个不同的等价类 - 一个用于空字符串,一个用于0
。这两者在我们的FA中都需要不同的状态。
字符串1
怎么样?它可以与0
和空字符串区分开来,因为您可以将10
添加到1
以获取110
,这是该语言中的字符串,但您无法添加它到0
或空字符串以获取语言中的字符串。所以我们还有另一个州。
字符串00
怎么样?此字符串不在语言中,并且不能将其他字符串添加到此字符串以获取该语言中的字符串。这是另一个等价类。事实证明,下一个字符串01
和10
也属于此类。
字符串11
最终与空字符串在同一个类中:您可以将语言中的任何字符串添加到11
并获取该语言中的另一个字符串。如果您尝试所有长度为3的字符串,您会发现所有这些字符串都属于上述类之一,您可以在此时停止检查。
所以我们有四种状态 - 我们称之为[-]
,[0]
,[1]
和[00]
。现在我们找出转变。
如果您在0
中获得[-]
,则需要转到[0]
...如果您获得1
,则需要转到[1]
1}}。对于其余部分,只需通过添加到规范的字符串,以及结果字符串将在哪个类中...并进入该状态来确定您将获得的字符串。