【问题标题】:Design a Push Down Automata to count the number of characters设计一个下推自动机来计算字符数
【发布时间】:2010-11-13 17:01:04
【问题描述】:

字母表:a、b、c 我正在尝试定义一个接受的 PDA

 a^n b^m c^p : n + p = 2k for some integer k, m = k, and n, m, p, k >= 0

我认为可以接受的一些字符串是:#abc#; #aabbcc#; #aaabbbccc#; #abbccc#; #aaabbc#等 a、b、c的个数不一定相等。

在最右边的黑色空间上启动下推自动机的头部。

我通常将我的 PDA 写成列:

State:    Symbol Read:    Next State:    Head Instruction:    
s         #               r1             Left
r1        c               r2             #

等等……

【问题讨论】:

  • a^n b^n c^n - 你是对的。 #cab# 不可接受
  • 我误读了这个,还是mk 的不必要别名?
  • 不,我相信你没看错
  • @Bobby:我编辑了您的问题,以便与您对语言定义的更新更加一致。我希望我没有误解你的意思,如果是,请随时回滚。
  • @Jim:谢谢,我没有看到那些字符串,谢谢。这仍然不是上下文无关语言,虽然正确?

标签: context-free-grammar turing-machines pushdown-automaton


【解决方案1】:

我认为您描述的语言不是上下文无关的,因此不能 PDA 识别。问题是您需要强制执行约束 (n+p = 2m) 跨越任意长的子串,但不允许“泵送”(当 尝试使用抽水引理为上下文无关语言构建证明)。

【讨论】:

  • 谢谢,我同意你的看法。我将通过抽水引理证明这不是上下文无关的。
【解决方案2】:
M=(K, E, q0, F, delta, stack_alphabet)
K={q0,q1,q2}
E={a,b,c,z}
F={q2}
stack_alphabet={a,b,z}
delta=
{
 *pop*     *push*
(q0, e, e)(q1, z)
(q1, a, e)(q1, a)
(q1, b, a)(q1, e)
(q1, b, z)(q1, bz)
(q1, c, b)(q2, e)
(q2, c, b)(q2, e)
}

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多