PDA问题>需要帮忙

时间:2011-03-25 16:06:57

标签: computer-science automata

我有一个任务来构建PDA,它识别语言 A = {a ^ m b ^ n | m> n}与Σ= {a,b} ..我有点困惑怎么做..你们能帮助我解决这个问题吗?谢谢

2 个答案:

答案 0 :(得分:0)

在维基百科页面上查看下推自动机的example:它用于语言{0 n 1 n | n ≥0},即一些零后跟相同数量的零。这与您的任务不完全相同,但类似。您能否根据课程资料了解说明?你会如何修改它以识别你需要的语言?

答案 1 :(得分:0)

让我们不要直接针对问题设计PDA,并尝试首先理解这个问题。

可以从给定语言生成的字符串很少 那么可以有无限的这样的字符串,例如 -

  1. AAB
  2. AAAB
  3. AAA。B
  4. aaaa..bb
  5. 我们的想法是确保a的数量总是大于b的数量,或者我们可以说字符串中b的数量不应超过PDA要接受的字符串数量。

    现在我们有一个问题。

    如何确保a的数量大于b的数量

    对于字符串,如果我们开始取消字符串中每个'b'的a
    我们将得出以下结论

    1. a的数量等于b的数量 - 取消后没有任何内容
    2. b的数量大于a的数量 - 我们在取消后留下了几个b
    3. a的数量大于b的数量 - 我们在取消后只剩下几个
    4. 如果我们试图在'问题'和上述那些点之间建立关系,我们会发现属于上述第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)
      

      说明:

      1. 我们最初在堆栈中存储一个(q0状态)
      2. 遇到第一个b时,我们从堆栈弹出并将状态更改为q1
      3. 我们继续从堆栈中弹出一个
      4. 如果没有剩下的b来弹出堆栈,我们将状态更改为qf以指示字符串可接受。 (第3点)
      5. 如果剩下的b很少但是没有a从堆栈中弹出,我们将状态从q1更改为q2(陷阱)。 (第2点)
      6. 如果堆栈中没有一个被弹出,也没有b被留在输入字符串中,我们再次将状态从q1更改为q2(陷阱)。 (第1点)