【问题标题】:Multiple Push / pop in PDAPDA中的多次推送/弹出
【发布时间】:2020-05-27 18:58:08
【问题描述】:

在设计下推自动机时,考虑我的输入是 {a,b} 现在我可以在扫描它们时推送多个 a 或多个 b...然后在弹出时我可以弹出多个 a 或多个 b.. . 或者是不是我一次只能推/弹出一个元素,即推单个“a”或单个“b”,同时只弹出一个“a”或单个“b”?

【问题讨论】:

    标签: context-free-grammar pushdown-automaton context-free-language


    【解决方案1】:

    假设您有一个依赖于将多个值压入堆栈的 PDA。具体来说,在具有栈顶符号 x 和输入符号 y 的状态 q 中,您将符号 x 替换为字符串 s(可能会或可能不会将 x 保持在堆栈上的位置)并更改为状态 q'。

    此 PDA 可以转换为不依赖于同时将多个符号压入堆栈的PDA,如下所示:

    1. 添加状态 q1、q2、...、q|s|到PDA
    2. 将转换 (q, x, y) -> (q', s) 更改为 (q, x, y) -> (q1, s[1])
    3. 为 1 添加转换 (qk, x, e) -> (qk+1, s[2]x)
    4. 添加一个转换 (q|s|, x, e) -> (q', x)

    请注意,如果我们从 DPDA 开始,则在此转换之后仍然有一个 DPDA:我们有不消耗输入的转换,但是,只要在任何给定时间只能进行一个转换,这对于 DPDA 来说是可以的.

    弹出有点困难,但想法是一样的:

    1. 介绍一些新的状态
    2. 开始以正确的顺序弹出符号
    3. 如果你弹出所有你需要的东西,很好,像原来的 PDA 一样继续
    4. 如果你发现你丢失了你想要弹出的东西,你基本上应该崩溃(DPDA 不可能接受输入,因为它只是沿着这条路径走下去,因为它必须接受,而 NPDA 仍然可以接受一些其他路径)

    【讨论】:

    • 所以你的意思是说这两种情况下的力量,即在推动/弹出多个和单个元素时是相同的......??因此,这两个东西都是等效且有效的......??
    • @PiyushSawarkar 你是对的。这表明您使用哪种约定并不重要,因为两者最终在计算能力方面完全相同。
    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多