📜  NPDA 接受语言 L = {an bm cn | m,n>=1}

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

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

L = { abc, abbc, abbbc,  aabbcc, aaabccc, aaaabbbcccc, ...... } 

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

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

\Gamma = { a, z }

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

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

堆栈转换函数 –

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

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

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