感谢NPDA接受语言L={a2mb3m|m≥ 1}

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

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

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

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

Gamma = {a, z}
Where, Gamma = set of all the stack alphabet
z = stack start symbol 

PDA构建中使用的方法- 因为我们想要设计一个NPDA,所以每次“a”出现在“b”之前。我们将连续两次将三个“a”推入堆栈,接下来的两个“a”将再次将三个“a”推入堆栈。也就是说,对于第一个“a”,我们什么也不做,只有状态会改变,对于下一个“a”,我们将执行推送操作,同样地,我们也会交替执行,即。, 对于两个a,我们推三个a 对于四个b,我们推六个a 之后,当“b”出现时,每次从堆栈中弹出一个“a”。

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

堆栈转换函数-

delta(q0, a, z) vdash (q1, z)     [ Indicates no operation only state change ]
delta(q1, a, z) vdash (q2, aaaz)  [ Indicates push operation for alternate 'a'] 
delta(q2, a, aaaz) vdash (q1, aaaz) [ Indicates no operation only state change ]
delta(q1, a, aaaz) vdash (q2, aaaa) [ Indicates push operation for alternate 'a']
delta(q2, b, a) vdash (q3, epsilon )  [Indicates pop operation ]
delta(q3, b, a) vdash (q3, epsilon )  [Indicates pop operation ]
delta(q3, epsilon, z) vdash (qf, z )    

式中,q0=初始状态 qf=最终状态 epsilon =表示pop操作

正确的转换图- 图片[21]-感谢NPDA接受语言L={a2mb3m|m≥ 1}-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享