[英]PDA for {a^n b^m | n<=m<=2n}
有人可以帮我为{a^nb^m | 设计PDA吗? n<=m<=2n}。 你能设计一个解释一下吗?
这里的想法是:读取每个 a 并将一个符号压入堆栈。 然后,当您开始读取 b 时,在每一步中,不确定地选择是读取单个 b 并弹出一个堆栈符号,还是读取两个 b 并弹出一个堆栈符号。 然后,如果输入已用完且堆栈为空,则使 PDA 接受。
如果至少一条路径最终接受,则 NPDA 接受; 因此,只要某种猜测模式为每个堆栈符号读取一个或两个 b 得到正确的 m 值,就可以接受该字符串。 应该清楚的是,对于任何 m 值,使得 n <= m <= 2n,线性系统有一个解:
x + 2y = m
x + y = n
这里,x 是 NPDA 应该猜测它读取一个 b 的次数,y 是 NPDA 应该猜测它读取两个 b 的次数。 我们可以从第一个中减去第二个:
y = m - n
因为 y 必须是非负数,所以我们得到第一个条件,n <= m。 将其代入第二个起源方程给出:
x + m - n = n
<=> x = 2n - m
同样,因为 x 必须是非负数,这给出了我们的第二个条件,m <= 2n。
不确定地,在每次读取a
a 时将一个或两个a
推入堆栈,然后将传入的b
与推入a
匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.