📌  相关文章
📜  NPDA 接受语言 L = {a2mb3m |米≥1}

📅  最后修改于: 2021-09-27 14:36:39             🧑  作者: Mango

先决条件——下推自动机,下推自动机被最终状态接受
问题 –设计一个非确定性的 PDA 来接受语言 L = {a 2m b 3m | m≥1},即

L = {aabbb, aaaabbbbbb, aaaaaabbbbbbbbb, aaaaaaaabbbbbbbbbbbb, ......} 

在每个字符串,每 2 个 ‘a’ 就有 3 个 ‘b’。

解释 –
在这里,我们需要保持a和b的顺序,即所有的a先来,然后所有的b都来。因此,我们需要一个堆栈和状态图。 a 和 b 的计数由堆栈维护。在这里,每 2 个 ‘a’ 就有 3 个 ‘b’s。我们将采用 2 个堆栈字母:

\Gamma = {a, z} 其中, \Gamma = 所有堆栈字母的集合 z = 堆栈起始符号

用于构建PDA的方法 –
由于我们要设计 NPDA,因此每次 ‘a’ 出现在 ‘b’ 之前。我们会将三个 ‘a’ 压入堆栈,连续两个 ‘a’ 和接下来的两个 ‘a’,我们将三个 ‘a’ 压入堆栈。也就是说,对于第一个 ‘a’,我们什么都不做,只有状态会改变,而对于下一个 ‘a’,我们将执行推送操作,类似地,我们交替执行此操作,即,
对于两个 a,我们推三个 ‘a’
对于四个 b,我们推六个“a”
之后,当 ‘b’ 出现时,每次都从堆栈中弹出一个 ‘a’。

因此,最后如果堆栈变空,那么我们可以说该字符串已被 PDA 接受。

堆栈转换函数 –

\delta (q0, a, z) \vdash (q1, z) [表示没有操作只有状态改变] \delta (q1, a, z) \vdash (q2, aaaz) [表示替代’a’的推送操作] \delta (q2, a, aaaz) \vdash (q1, aaaz) [表示没有操作只有状态改变] \delta (q1, a, aaaz) \vdash (q2, aaaa) [表示替代’a’的推送操作] \delta (q2, b, a) \vdash (q3, \epsilon ) [表示弹出操作] \delta (q3, b, a) \vdash (q3, \epsilon ) [表示弹出操作] \delta (q3, \epsilon , z) \vdash (qf, z )

其中,q0 = 初始状态
qf = 最终状态
\epsilon = 表示弹出操作

正确的过渡图-