当相互比较时,DFA和NFA的亲戚和角色有什么关系?
我知道DFA比NFA更容易实现,并且NFA比DFA更慢到达接受状态但是还有其他明确的,众所周知的优点/缺点吗?
答案 0 :(得分:1)
NFA和DFA接受同一组语言 - 常规语言。
直接实现NFA(不是DFA,因为DFA是NFA的子集)通常涉及允许回溯,而直接实现DFA只需要与输入长度一样多的步骤,因此从这个意义上讲,与同等的NFA(不是DFA)相比,DFA“得出的答案”更快。
当试图找到对应于给定语言或RE的FA(例如,通过算法)时,通常更容易首先到达NFA(因为规则不太严格)。当试图证明FA的存在时尤其如此,因为NFA的存在与DFA的存在一样好。如果需要DFA,则存在以下算法:(a)将NFA转换为等效DFA,以及(b)最小化DFA。
进行粗略概括,DFA更快但更复杂(就状态和转换的数量而言),而NFA则更慢但更简单(在相同的术语中)。
答案 1 :(得分:1)
NFA优于DFA的优势在于始终“选择正确的道路”。由于您无法在算法中说“选择正确的路径”,因此通常从NFA到DFA的转换有效,创建符号化多个NFA状态的DFA状态。因此,当您的NFA处于A状态且可以选择转到A,B或C时,DFA中的下一个状态将是{A,B,C}。
这解释了优点和缺点: DFA可以更容易实现,因为它们的下一个状态由函数决定。 NFA允许用户更轻松地表达他们想要的内容,因为NFA可以在多个路径之间进行选择。
答案 2 :(得分:0)
NFA相对于DFA的一个明显优势在于,您可以使用NFA轻松地构建表示两种(或多种)语言的联合,交集,概念等语言的FA。也就是说,如果你有一点点简单的FA在做部分工作,你可以使用NFA轻松地将它们组合起来。在使用DFA时,您需要构建一个新的自动机来完成所有工作。
看,它更容易实现。 但是你提到的是时间问题。