在编译器设计中,DFA和NFA有什么区别?


确定性有限自动机 (DFA)

确定性意味着对于每个输入,自动机只有一个状态可以从其当前状态转换。在确定性有限自动机中,磁头只能在一个方向上移动以扫描输入磁带符号。但在双向有限自动机的情况下,在扫描输入符号时,磁带的磁头可以从其当前位置向右或向左移动。

有两种方法可以表示确定性有限自动机:

  • 状态转换图

它是一个有向图或流程图,包含状态和边。状态转换图中的强路径是一系列边,形成从某个起始状态开始并以最终状态结束的路径。

  • 状态转换表

有限自动机可以用5元组 (Q, Σ, δ, q0, F) 表示

  • Q 是一个有限的非空状态集。
  • Σ 是一个有限的输入符号集。
  • 𝛿 是状态转换函数。
  • q0 ∈ Q 是初始状态。
  • F ⊆ Q 是最终状态集。


非确定性有限自动机 (NFA)

非确定性意味着可能存在多个可能的转换。因此,对于给定的输入,输出是非确定性的。NFA也可以表示为非确定性有限状态机。在NFA中,转换不是由它们的输入符号或源状态专门决定的。不需要为每个单个状态转换读取输入符号。

示例1 - 绘制正则表达式 a(a + b) *ab 的 NFA

解答

示例2 - 绘制 a + b + ab 的 NFA

解答

让我们看看DFA和NFA之间的比较。

DFANFA
从一个状态到另一个状态的每个转换都是唯一且确定的。对于输入可能存在多个转换,即非确定性的。
不允许空转换 (ε)。允许空转换 (ε),这意味着在没有任何输入的情况下从当前状态转换到下一个状态。
状态转换函数 - δ - Q x Σ → Q状态转换函数 - δ - Q x Σ → 2Q
它需要较少的内存,因为转换和状态较少。它需要更多的内存。
DFA示例 每个状态都有唯一的输入符号 Σ = {a, b} 从中发出。NFA示例 因为状态0上存在输入符号'a'的多个转换。并且状态2没有转换,即非确定性的。

更新于:2021年11月8日

2K+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告