📌  相关文章
📜  NPDA 接受语言 L = {ambnc(m+n) | m,n≥1}

📅  最后修改于: 2021-09-28 10:23:50             🧑  作者: Mango

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

L = {abcc, aabccc, abbbcccc, aaabbccccc, ......} 

在每个字符串,’a’ 和 ‘b’ 的数量总和等于 c 的数量。所有的 c 都在 ‘a’ 和 ‘b’ 之后。

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

\Gamma = { a, z }

在哪里, \Gamma = 所有堆栈字母的集合
z = 堆栈起始符号

用于构建PDA的方法 –
由于我们要设计一个 NPDA,因此每次 ‘a’ 出现在 ‘b’ 之前并且 ‘b’ 出现在 ‘c’ 之前。当 ‘a’ 出现时,将其压入堆栈,如果再次出现 ‘a’ 则也将其压入堆栈。之后,当 ‘b’ 出现时,将 ‘a’ 压入堆栈,如果再次出现 ‘b’ 则也将其压入堆栈。然后当 ‘c’ 出现时,每次从堆栈中弹出一个 ‘a’。
因此,最后如果堆栈变空,那么我们可以说该字符串已被 PDA 接受。

堆栈转换函数 –

\delta (q0, a, z) \vdash (q0, az) \delta (q0, a, a) \vdash (q0, aa) \delta (q0, b, a) \vdash (q1, aa) \delta (q1, b, a) \vdash (q1, aa) \delta (q1, c, a) \vdash (q2, \epsilon ) \delta (q2, c, a) \vdash (q2, \epsilon ) \delta (q2, \epsilon , z) \vdash (qf, z)

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