📌  相关文章
📜  NPDA 接受语言 L = {an bn cm | m,n>=1}

📅  最后修改于: 2021-09-27 15:42:40             🧑  作者: Mango

先决条件——下推自动机,下推自动机被最终状态接受

问题– 设计一个非确定性的 PDA 来接受语言 L = { a^nb^nc^m | m,n>=1},即

L = { abc, abcc, abccc,  aabbc, aaabbbcc, aaaabbbbccccc, ...... }

在每个字符串,a 的数量等于 b 的数量。并且 c 的数量与 a 和 b 的数量无关。这个问题与接受语言L = {的NPDA非常相似a^nb^n | n>=1 }。唯一的区别是我们在这里添加c^m .

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

\Gamma = { a, z }

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

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

堆栈转换函数 –

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

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

所以,这是我们接受语言 L = { 所需的非确定性 PDA a^nb^nc^m |米,n>=1 }