所有非确定性有限自动机都可以转化为等效的确定性有限自动机。但是,确定性有限自动机仅允许每个符号从状态指向一个箭头。因此,其状态应为NFA状态集的成员。这似乎表明,DFA的状态数可以根据NFA的状态数成指数增长。但是,我想知道如何实际证明这一点。
所有非确定性有限自动机都可以转化为等效的确定性有限自动机。但是,确定性有限自动机仅允许每个符号从状态指向一个箭头。因此,其状态应为NFA状态集的成员。这似乎表明,DFA的状态数可以根据NFA的状态数成指数增长。但是,我想知道如何实际证明这一点。
Answers:
将NFA转换为另一个NFA但不对DFA执行此操作的操作是逆向操作(将所有箭头指向相反的方向,并将初始状态与接受状态互换)。由转化的自动机识别的语言是反转语言。
因此,一个想法是寻找一种具有非对称结构的语言。展望未来,应通过检查仅需要n + O (1 )状态的前符号来识别该语言。向后,应该保留最后n个状态的内存,这需要A n + O (1 )个状态,其中A是字母大小。
我们正在寻找一种形式为的语言,其中M n由长度为n的单词组成,S是字母表的重要组成部分,M '不提供任何进一步的约束。我们不妨选择最简单的字母A = { a ,b }(单例字母不会,并且在那里不会得到较小的NFA),并且M ' = A ∗。非平凡的S意味着S = { a }。至于,我们要求它与 S不相关(因此,反向语言的DFA将需要保留 S的内存):取 M n = A n。
因此,令。可以由具有n + 2个状态的简单DFA识别。
取反可得到NFA,它可识别。
识别 L R n的最小DFA至少具有2 n +1 个状态。这是因为长度的所有单词2 Ñ + 1必须在DFA达到不同的状态。(换句话说,它们属于不同的迈希尔-Nerode等价类。)为了证明这一点,取两个不同的话ü ,v ∈ 甲Ñ + 1,并让ķ是它们的不同(位置û ķ ≠ v ķ)。不失一般性,我们假设ü ķ和 v k = b。然后 ü b ķ ∈ 大号ř Ñ和 v b ķ ∉ 大号ř Ñ( b ķ为区分扩展 Ù和 v)。如果 u和 v在DFA中识别出 L R n的状态相同,那么 u b k和 v b k也会相同,这是不可能的,因为一个导致了接受状态,而另一个则没有。
致谢:Wikipedia中引用了此示例,但未作任何解释。本文引用了我尚未阅读的一篇文章,该文章提供了更紧密的界限:
Leiss,Ernst(1981),“布尔自动机对常规语言的简洁表示”,理论计算机科学 13(3):323–330,doi:10.1016 / S0304-3975(81)80005-9。
考虑的语言以下家族:
的字母为{ #,1 ,… ,n }。
有一个具有状态的NFA 可以识别语言L n。它有n个副本。在第i个副本中,我们猜测最后一个字母是i,然后检查我们的猜测。用3个状态构造这样的副本很简单。唯一的不确定性是处于初始状态。
但是,由于DFA必须记住{ 1 ,… ,n }的子集,因此没有DFA能够识别状态数少于2 O (n )的。
我很确定Sipser的书有这个例子。
另一个例子是所有缺少一个字母符号的单词的语言。如果字母的大小为,则NFA可以“猜测”起始状态,因此接受具有n个状态的语言。另一方面,使用Nerode定理,很容易看出该语言的最小DFA大小为2 n。
此示例还显示,NFA在互补作用下可能导致指数爆炸。确实,众所周知,包含字母的所有符号的所有单词的语言所用的任何NFA(甚至无上下文语法)都必须具有指数级的状态。