微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决PDA {a^n b^m | n<=m<=2n}

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

解决方法

这里的想法是:读取每个 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?