【问题标题】:NPDA for this language with n and n-1此语言的 NPDA 与 n 和 n-1
【发布时间】:2013-11-29 00:02:50
【问题描述】:

要绘制接受 L 的 NPDA 的转换图,我认为可以通过读取 a、写入 a,然后向右移动,然后对 b 执行相同操作来开始这个问题是某个状态 q1 正在获得那些“ab”运动。但那怎么可能让bb 拥有n-1

我有一些我认为可行的方法,但我正在自学,所以也许有人可以告诉我 nn-1 在哪里可以正确完成。

编辑:

但现在应该是这样了--

【问题讨论】:

    标签: automata state-machine formal-languages pushdown-automaton


    【解决方案1】:

    其实很简单。每次读取“ab”时,都会在堆栈中存储一个标记。然后在阅读“c”之后,您从该令牌中取出一个。然后对于每个“bb”,您从堆栈中取出一个标记。当堆栈为空时,您接受。

    对于 NPDA 本身,这取决于您如何定义接受度。根据您的问题,我不明白“写一个a,然后向右移动”是什么意思。您是否将 NPDA 与图灵机混淆了? NPDA 与 NFA(非确定性有限自动机)非常相似,只是它配备了一个堆栈,您可以在其中放置堆栈符号。在此处阅读更多信息:http://www.cs.duke.edu/~rodger/courses/cps140/lects/sectnpdaH.pdf

    下面是转换表,假设堆栈符号{A,Z} 其中Z 是初始堆栈符号。当我们处于唯一的接受状态 qa 并且我们已经完成读取输入磁带时接受。假设每次转换总是消耗一个堆栈符号,如果在 NPDA 不处于接受状态时没有更多符号要消耗,则 NPDA 不会接受(或拒绝)该字符串。

    在下表中,第一列代表我们当前所处的状态以及我们正在读取的堆栈符号。随后的列表示在读取输入字符串中的特定字符(或根本不使用 ε 读取任何字符)时推入堆栈的新状态和堆栈符号

    +--------++---------+--------+--------+--------+ | ||一个 |乙 | c | ε | +--------++---------+--------+--------+--------+ |(q1,Z)|| (q2,Z) | - | - | - | +--------++---------+--------+--------+--------+ |(q1,A)|| (q2,A) | - | (q3,ε) | - | +--------++---------+--------+--------+--------+ |(q2,Z)|| - |(q1,ZA) | - | - | +--------++---------+--------+--------+--------+ |(q2,A)|| - |(q1,AA) | - | - | +--------++---------+--------+--------+--------+ |(q3,Z)|| - | - | - |(qa,ε) | +--------++---------+--------+--------+--------+ |(q3,A)|| - | (q4,A) | - | - | +--------++---------+--------+--------+--------+ |(q4,A)|| - | (q3,ε) | - | - | +--------++---------+--------+--------+--------+

    这里的关键思想是堆栈中 A 的数量表示短语“ab”在输入字符串中出现的次数。

    您可以看到,在使用堆栈符号 Z 读取状态 q1 中的“a”时,我们将 Z 推回堆栈。这意味着仍然没有检测到“ab”。然后它将转到 q2

    在 q2 中,我们只接受“b”,任何其他输入都会导致它挂起(并因此拒绝)。它将读取的状态推回堆栈,加上一个额外的 A,有效地将堆栈中的 A 数量增加 1,因为此转换表示输入字符串中的附加短语“ab”。

    状态q3表示成功读取“c”后的部分。请注意,从 q1 到 q3 的转换必须消耗 A,而不是 Z,因为我们有约束 n >= 1。然后,在读取“b”后,它将进入状态 q4 以等待另一个“b”。稍后 q4,在读取“b”时,会消耗堆栈符号 A,匹配

    在状态 q3,一旦我们到达堆栈符号 Z,我们还希望转换到接受状态 qa,指的是有 n 副本的状态"ab" 和 n-1 "bb" 的副本。

    State q4 只接受带有堆栈符号A的输入字符串“b”,表示找到一个新短语“bb”应该匹配之前找到的一个短语“ab”。

    希望这会有所帮助!

    【讨论】:

    • 很好的解释,+1,但我想确保我完全理解你。我补充说,我认为这是可行的方式。
    • 如果图表中的“lambda”(或 2?)是指不将任何东西放入堆栈,而“(ab,1)/1”是指放入 additional i> 符号放入堆栈,然后你就得到了它。虽然我不确定你是否应该在 q_0 中包含读取“(ab,Z)”的边界情况。
    • 谢谢,我一定会回去看看(ab,z)/z,接受的答案。你知道如果你有时间我碰巧在stackoverflow.com/questions/20258391/… 上工作,我已经有了一些想法(这可能是完全错误的,但嘿谁知道)还有stackoverflow.com/questions/20232717/… 我正在讨论一些磁盘服务算法.如果你有兴趣。
    • 添加了(ab,z)/z,只是想确保这与您所说的过渡相同。
    • 更正后将1 初始推送到堆栈顶部的z11。只是想确保我理解正确。
    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 2014-02-12
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2016-04-27
    相关资源
    最近更新 更多