📜  下推自动机介绍

📅  最后修改于: 2022-05-13 02:24:08.151000             🧑  作者: Mango

下推自动机介绍

我们已经讨论过有限自动机。但是有限自动机可以用来只接受常规语言。
下推自动机是一个有限自动机,具有称为堆栈的额外内存,可帮助下推自动机识别上下文无关语言。下推自动机(PDA)可以定义为:

  • Q 是状态集
  • ∑是输入符号的集合
  • Γ 是一组下推符号(可以从堆栈中压入和弹出)
  • q0 是初始状态
  • Z 是初始下推符号(最初存在于堆栈中)
  • F 是最终状态的集合
  • δ 是将 Q x {Σ ∪ ∈} x Γ 映射到 Q x Γ* 的转移函数。在给定状态下,PDA 将读取输入符号和堆栈符号(堆栈顶部)并移动到新状态并更改堆栈符号。

瞬时描述 (ID)
瞬时描述 (ID) 是 PDA 如何“计算”输入字符串并决定接受或拒绝字符串的一种非正式表示法。

ID 是三元组 (q, w, α),其中:
1. q 是当前状态。
2. w 是剩余的输入。
3.α 是堆栈内容,在左上角。闸机符号
⊢ 符号称为“旋转门符号”,表示
一招。
⊢* 符号表示一系列移动。
例如- (p, b, T) ⊢ (q, w, α)
这意味着在从状态 p 转换到状态 q 时,输入符号 'b' 被消耗,堆栈的顶部 'T' 被新字符串'α' 替换

示例:定义语言 {a n b n | 的下推自动机n > 0}
解: M = 其中 Q = { q0, q1 } 和 Σ = { a, b } 和 Γ = { A, Z } 和 δ 由下式给出:

δ( q0, a, Z ) = { ( q0, AZ ) }
δ( q0, a, A) = { ( q0, AA ) }
δ( q0, b, A) = { ( q1, ∈) }
δ( q1, b, A) = { ( q1, ∈) }
δ( q1, ∈, Z) = { ( q1, ∈) }让我们看看这个自动机是如何为 aaabbb 工作的。

解释:最初,自动机的状态是 q0,堆栈上的符号是 Z,输入是 aaabbb,如第 1 行所示。在读取“a”(在第 2 行中以粗体显示)时,状态将保持 q0 并将推送堆栈上的符号 A。在下一个“a”(如第 3 行所示)上,它将另一个符号 A 压入堆栈。读取 3 个 a 后,堆栈将是 AAAZ,A 在顶部。读取 'b' 后(如第 5 行所示),它将弹出 A 并移动到状态 q1 并且堆栈将为 AAZ。当读取所有 b 时,状态将为 q1,堆栈将为 Z。在第 8 行,输入符号 '∈' 和堆栈上的 Z,它将弹出 Z,堆栈将为空。这种接受称为空栈接受。笔记 :

  • 上述下推自动机本质上是确定性的,因为输入符号和堆栈符号上的状态只有一次移动。
  • 非确定性下推自动机可以从输入符号和堆栈符号的状态进行不止一次移动。
  • 并非总是可以将非确定性下推自动机转换为确定性下推自动机。
  • 与表达确定性 PDA 相比,非确定性 PDA 的表达能力更强,因为某些语言被 NPDA 接受但不被确定性 PDA 接受,这将在下一篇文章中讨论。
  • 下推自动机可以使用空堆栈的接受或最终状态的接受来实现,并且可以将一个转换为另一个。


问题:以下哪一对具有不同的表达能力?

A. 确定性有限自动机(DFA)和非确定性有限自动机(NFA)
B. 确定性下推自动机(DPDA)和非确定性下推自动机(NPDA)
C. 确定性单带图灵机和非确定性单带图灵机
D. 单带图灵机和多带图灵机