DFA,NFA和epsilon NFA三种功能都使我们能够代表特定的常规语言。使用这些表示中的任何一种,我们都可以得到相同的正则表达式,那么为什么我们需要研究有限自动机的所有三种表示形式?关于NFA可以做什么而DFA无法做到的一些解释,也就是NFA可以帮助我们设计不确定性。例如,在设计游戏(国际象棋)时,我们有很多选择可以从NFA轻松表示的特定位置移走特定的棋子。但是,当使用NFA或DFA可以完成epsilon NFA时又有什么用呢?
DFA,NFA和epsilon NFA三种功能都使我们能够代表特定的常规语言。使用这些表示中的任何一种,我们都可以得到相同的正则表达式,那么为什么我们需要研究有限自动机的所有三种表示形式?关于NFA可以做什么而DFA无法做到的一些解释,也就是NFA可以帮助我们设计不确定性。例如,在设计游戏(国际象棋)时,我们有很多选择可以从NFA轻松表示的特定位置移走特定的棋子。但是,当使用NFA或DFA可以完成epsilon NFA时又有什么用呢?
Answers:
第四次添加常规语法。还有其他...
正则表达式(以及正则语法)是完全不同的形式主义,恰好描述了相同的语言集。同样,这一事实的证明探索了重要的相互关系,并且是形式主义看起来非常不同,基于根本不同的概念但描述相同语言的一个例子。同样,在一个相当简单的环境中。
对于“现实世界”的使用,您可以从正则表达式开始,并获得用于高性能搜索的最小DFA。数字电路本质上是DFA,了解它们是计算机工程的中心。最后但并非最不重要的一点是,即使系统离真正的DFA很远,以这种方式查看它也可能有助于理解它,但通常可以将系统建模为“处于一种状态”并“移动到另一个”。
稍后添加:正如Raphael所指出的,直接解释要搜索的NFA可能会更有效,因为创建DFA可能会很昂贵,而NFA可能会小得多。
研究DFA与NFA的不同形式/对应关系的原因多种多样。这里有一些来自高级复杂性理论的精选亮点。
NFA是用于“并行计算”的有趣模型。人们可以将通过NFA进行的状态升级视为DFA计算的并行版本。因此DFA与NFA计算反映了顺序计算与并行计算的某些区别。通过比较这两种情况,还有助于研究问题的固有算法复杂性。
NFA通常用在正则表达式匹配系统中(在各种语言中普遍存在,尤其是在unix时代产生的现代语言中),通常允许对正则表达式进行描述,这些正则表达式可以转换为NFA,然后可以转换为DFA以帮助更有效的搜索。
该地区仍然存在许多未解决的问题,并且经常根据DFA / NFA对应关系对其进行研究。参见例如DFA(cstheory stackexchange)上是否还有任何未解决的问题。令人惊讶的是,其中一些与CS的深层区域相关联,包括P与NP问题,即DFA的交集非空。另外一个开放区域是例如计算DFA的最小NFA。
也为一些相关的有识之士看到这个semifamous / highvoted问题cstheory.se:什么是启蒙我应该学习有限自动机后可以实现?
DFA与NFA的应用非常多样化,并且在其中经常利用两者之间的对应关系。字符串模式匹配已在上面提到,但是DFA / NFA构造经常用于(自动)语音识别中。参见例如,这篇被高度引用的论文:语音识别中的加权有限状态传感器 / Mohri,Pereira,Riley
与NFA相比,DFA的实现更容易,因为它们的下一个状态由功能决定,而NFA可以帮助用户轻松地表达他们想要作为输出的内容,因为NFA可以在多个路径之间进行选择。epsilon-NFA是NFA的扩展,可以在不使用任何输入符号的情况下完成转换。