【问题标题】:PDA for {a^n b^m | n<=m<=2n}PDA 为 {a^n b^m | n<=m<=2n}
【发布时间】:2021-06-01 05:09:19
【问题描述】:

谁能帮我为{a^n b^m | 设计PDA? n

【问题讨论】:

  • 你已经尝试了什么?
  • 你试过看看它是否是上下文无关的吗?如果您为每个扫描的“b”弹出 1 个“a”,则当您扫描相同数量 (n) 的“a”和“b”时,您将清空堆栈。之后,您需要确保所有剩余的 'b' 不超过 '2n'。希望你能得到线索。

标签: automata pushdown-automaton automata-theory


【解决方案1】:

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

  • 如果您总是选择每次读取 b 时弹出一个堆栈符号,那么您会得到 m = n
  • 如果你总是选择为每对 b 读取弹出一个堆栈符号,那么你会得到 m = 2n
  • 如果您有时选择读取一个 b,有时选择读取两个,那么您最终会得到 n

如果至少有一条路径最终接受,则 NPDA 接受;因此,只要某种猜测模式为每个堆栈符号读取一个或两个 b 得到正确的 m 值,就可以接受该字符串。应该清楚的是,对于任何满足 n

x + 2y = m
x + y = n

这里,x 是 NPDA 应该猜测它读取一个 b 的次数,y 是 NPDA 应该猜测它读取两个 b 的次数。我们可以从第一个中减去第二个:

y = m - n

因为 y 必须是非负数,所以我们得到第一个条件,n

    x + m - n = n
<=> x = 2n - m

同样,因为 x 必须是非负数,这给出了我们的第二个条件,m

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2018-10-21
    • 2021-08-31
    • 1970-01-01
    • 2022-10-13
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多