繁体   English   中英

PDA {a^nb^m | n<=m<=2n}

[英]PDA for {a^n b^m | n<=m<=2n}

有人可以帮我为{a^nb^m | 设计PDA吗? n<=m<=2n}。 你能设计一个解释一下吗?

这里的想法是:读取每个 a 并将一个符号压入堆栈。 然后,当您开始读取 b 时,在每一步中,不确定地选择是读取单个 b 并弹出一个堆栈符号,还是读取两个 b 并弹出一个堆栈符号。 然后,如果输入已用完且堆栈为空,则使 PDA 接受。

  • 如果您总是选择为每个 b 读取弹出一个堆栈符号,那么您会得到 m = n
  • 如果你总是选择为每一对 b 读取弹出一个堆栈符号,那么你得到 m = 2n
  • 如果您有时选择读取一个 b 有时选择读取两个,那么您最终会得到 n < m < 2n; n < m 因为有时您读取的 b 比堆栈符号多, m < 2n 因为有时您只读取一个 b 并从堆栈中弹出

如果至少一条路径最终接受,则 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM