我参加了这个练习,我想了几个小时,什么都没有。
我们的字母为{1...n}
,我们的语言Ln包含Σ*
下的所有字词,因此该语言中的每个字词都不包含字母表中的至少一个字母。
w={111223432}
使用该语言,因为单词中缺少'5'
。单词w={1352224}
不在语言中,因为所有字母1...n
都在单词中。我需要为具有n+1
个状态的语言设计NFA。
再一次,我尝试了一些事情并且没有一个好主意。
答案 0 :(得分:0)
为简单起见,我们为字母{a,b,c}执行此操作。想象一下,你的语言中有一个字符串。这意味着它缺少一个,或者它缺少b,或者它缺少c(包括或)。如果我们知道丢失了哪个字符,那么检查一个字符串是否从来没有使用单个状态NFA来复制该字符是非常容易的,该单个状态NFA包含一个接受状态,该状态会在除该字符之外的所有内容上转换回自身。
由于字母表中只有有限多个字符,我们可以构建三个单状态NFA,每个NFA用于检查字符串是否缺少特定字符。
要构建整个机器,通过将ε-转换从开始状态添加到我们之前构建的每个单独的一个状态NFA,让NFA的起始状态不确定地猜测哪个字符缺失。你现在有这种语言的四州NFA。 (你可以看到它的图片here。)希望看到如何将其概括为更大的字母大小并不太难!