为给定语言构建下推自动机

前置知识

下推自动机, 下推自动机的终态接受

下推自动机(PDA)类似于确定性有限自动机(DFA),但它比 DFA 具有更多的特性。用于实现 PDA 的数据结构是栈。PDA 会为每个输入产生一个关联的输出。所有输入要么被压入栈中,要么被直接忽略。我们可以对用于 PDA 的栈执行基本的入栈和出栈操作。DFA 面临的难题之一是无法计算输入给机器的字符数量。而 PDA 通过使用栈解决了这个问题,因为它为我们提供了这种计数能力。

下推自动机 (PDA) 可以定义为 –

M = (Q, Σ, Γ, δ, q0, Ζ, F) 其中

  • Q 是状态的有限集合
  • Σ 是一个有限集合,称为输入字母表
  • Γ 是一个有限集合,称为栈字母表
  • δ 是 Q X ( Σ ∪ {ε} X Γ X Q X Γ*) 的有限子集,即转移关系。
  • q0 ∈ Q 是起始状态
  • Ζ ∈ Γ 是初始栈符号
  • F ⊆ Q 是接受状态的集合

状态转移的表示 –

!image

PDA 中入栈的表示 –

!image

PDA 中出栈的表示 –

!image

PDA 中忽略的表示 –

!image

问题 1) 为语言 L = {0n1m2m3n | n>=1, m>=1} 构建 PDA

该 PDA 采用的方法 –

首先将 0 压入栈中。然后将 1 压入栈中。

接着,对于每个作为输入的 2,从栈中弹出一个 1。如果还有一些 2 剩余,且栈顶是 0,那么该字符串不会被 PDA 接受。此后,如果 2 已经处理完毕且栈顶是 0,那么对于每个作为输入的 3,从栈中弹出一个 0。如果字符串结束且栈为空,则该字符串被 PDA 接受,否则不被接受。

  • 步骤-1: 收到 0 时,将其压入栈中。收到 1 时,将其压入栈中并转移到下一个状态。
  • 步骤-2: 收到 1 时,将其压入栈中。收到 2 时,从栈中弹出一个 1 并转移到下一个状态。
  • 步骤-3: 收到 2 时,从栈中弹出一个 1。如果所有的 1 都已从栈中弹出,现在收到了 3,则从栈中弹出一个 0 并转移到下一个状态。
  • 步骤-4: 收到 3 时,从栈中弹出一个 0。如果输入结束且栈为空,则转移到最终状态,字符串被接受。

!image

示例:

输入  : 0 0 1 1 1 2 2 2 3 3
结果 : ACCEPTED (被接受)

输入  : 0 0 0 1 1 2 2 2 3 3 
结果 : NOT ACCEPTED (未被接受)

问题 2) 为语言 L = {0n1m | n >= 1, m >= 1, m > n+2} 构建 PDA

该 PDA 采用的方法 –

首先将 0 压入栈中。当 0 处理完毕后,忽略两个 1。此后,对于每个作为输入的 1,从栈中弹出一个 0。当栈为空但仍有一些 1 剩余时,则忽略所有剩余的 1。

  • 步骤-1: 收到 0 时,将其压入栈中。收到 1 时,忽略它并转移到下一个状态。
  • 步骤-2: 收到 1 时,忽略它并转移到下一个状态。
  • 步骤-3: 收到 1 时,从栈顶弹出一个 0 并转移到下一个状态。
  • 步骤-4: 收到 1 时,从栈顶弹出一个 0。如果栈为空,收到 1 时忽略它并转移到下一个状态。
  • 步骤-5: 收到 1 时忽略它。如果输入结束则转移到最终状态。

!image

示例:

输入  : 0 0 0 1 1 1 1 1 1
结果 : ACCEPTED (被接受)

输入  : 0 0 0 0 1 1 1 1
结果 : NOT ACCEPTED (未被接受)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/47538.html
点赞
0.00 平均评分 (0% 分数) - 0