设计NFA,改变字母和语言

时间:2014-11-18 07:55:13

标签: nfa automaton

我参加了这个练习,我想了几个小时,什么都没有。

我们的字母为{1...n},我们的语言Ln包含Σ*下的所有字词,因此该语言中的每个字词都不包含字母表中的至少一个字母。

  • 例如:如果n = 5,则单词w={111223432}使用该语言,因为单词中缺少'5'。单词w={1352224}不在语言中,因为所有字母1...n都在单词中。

我需要为具有n+1个状态的语言设计NFA。

再一次,我尝试了一些事情并且没有一个好主意。

1 个答案:

答案 0 :(得分:0)

为简单起见,我们为字母{a,b,c}执行此操作。想象一下,你的语言中有一个字符串。这意味着它缺少一个,或者它缺少b,或者它缺少c(包括或)。如果我们知道丢失了哪个字符,那么检查一个字符串是否从来没有使用单个状态NFA来复制该字符是非常容易的,该单个状态NFA包含一个接受状态,该状态会在除该字符之外的所有内容上转换回自身。

由于字母表中只有有限多个字符,我们可以构建三个单状态NFA,每个NFA用于检查字符串是否缺少特定字符。

要构建整个机器,通过将ε-转换从开始状态添加到我们之前构建的每个单独的一个状态NFA,让NFA的起始状态不确定地猜测哪个字符缺失。你现在有这种语言的四州NFA。 (你可以看到它的图片here。)希望看到如何将其概括为更大的字母大小并不太难!