我的任务是构建识别语言A= {a^mb^n |的 PDA m > n} with ∑ = {a, b} ..我有点困惑怎么做..你们能帮我解决这个问题吗?谢谢
2 回答
0
在Wikipedia 页面上查看下推自动机的示例:它适用于语言 { 0 n 1 n | n ≥ 0 },即一些数量的零后跟相同数量的一。这与您的任务不完全相同,但相似。你能根据你的课程材料理解描述吗?您将如何修改它以识别您需要的语言?
于 2011-03-26T07:29:33.763 回答
0
让我们不要直接跳到为这个问题设计一个 PDA,而是首先尝试理解这个问题。
可以从给定语言生成的可能字符串有哪些。
那么可以有无限的这样的字符串,例如 -
- aab
- aaab
- 啊...b
- aaa..bb
这个想法是确保 a 的数量总是大于 b 的数量,或者我们可以说字符串中的 b 的数量不应该超过 PDA 接受的字符串中的 a 的数量。
所以现在我们有一个问题。
如何确保a的数量大于b的数量
对于一个字符串,如果我们开始为字符串中的每个 'b' 取消 a's
我们将得到以下结论
- a 的数量等于 b 的数量- 取消后什么都没有了
- b 的数量大于 a 的数量- 取消后我们只剩下几个 b
- a 的数量大于 b 的数量- 取消后我们只剩下几个 a
如果我们试图在“问题”和上面的那些点之间建立关系,我们观察到属于上面第 3 点的字符串是 PDA 可以接受的字符串。
现在让我们定义我们的PDA如下
P = ({q0,q1,qf}, {a,b}, δ, {a,b,Z0}, q0, Z0, {qf})
过渡函数(δ):
δ(q0, a, Z0) = (q0,aZ0)
δ(q0, a, a) = (q0, aa)
δ(q0, b, a) = (q1, Λ)
δ(q1, b, a) = (q1, Λ)
δ(q1, Λ, a) = (qf, Z0)
δ(q1, b, Z0) = (q2, Z0)
δ(q1, Λ, Z0) = (q2, Z0)
解释:
- 我们最初将 a 存储在堆栈中(q0 状态)
- 当遇到第一个 b 时,我们从堆栈中弹出 a 并将状态更改为 q1
- 我们继续从堆栈中弹出 a
- 如果没有 b 可以从堆栈中弹出 a,我们将状态更改为 qf 以指示字符串接受。(第 3 点)
- 如果剩下的 b 很少,但没有从堆栈中弹出的 a,我们将状态从 q1 更改为 q2(Trap)。(第 2 点)
- 如果堆栈中既没有 a 被弹出,b 也没有留在输入字符串中,我们再次将状态从 q1 更改为 q2(Trap)。(第 1 点)
于 2015-05-16T19:23:52.900 回答