【问题标题】:pushdown automaton give strings over alpha, beta and gamma下推自动机给出超过 alpha、beta 和 gamma 的字符串
【发布时间】:2016-06-14 13:18:07
【问题描述】:

我了解 PDA 的基础知识,但有一个我以前没有遇到过的问题。问题是:

考虑以下 PDA M,它接受最终状态和空堆栈。 $M = (K,\Sigma, \Gamma,\delta, q_0, Z_0, F)$, $K = q_0,\Sigma = a,b,c , \Gamma = a,b,c,S,T , Z_0 = S,F = q_0)$。转移关系由下式给出,

$ \delta(q_0, \epsilon, S) = ((q_0, \alpha),(q_0,T))$

$ \delta(q_0, \epsilon, T) = ((q_0, \beta),(q_0,\epsilon))$

$\delta(q_0, a, a) = ((q_0, \epsilon))$

$\delta(q_0, b, b) = ((q_0, \gamma))$

$\delta(q_0, c, c) = ((q_0, \epsilon))$

在 \Gamma$ 上给出字符串 $\alpha、\beta 和 \gamma

我之前看到的所有问题都给出了更直接的转换函数,并且不包括 $\alpha、\beta、\gamma$,所以我不确定这真正意味着什么,因为它们不是输入字母表的一部分。当它说给字符串超过 $\alpha、\beta、\gamma$ 是否意味着我应该组成自己的输入字符串?并相应地更改过渡功能还是什么?我不太确定,也无法在网上找到任何东西。任何帮助将不胜感激。

【问题讨论】:

    标签: pushdown-automaton


    【解决方案1】:

    不输入字符串,因为它们在字母表 $\Gamma$ 上。您应该只确定 PDA 在第一、第二和第四个子句中放入堆栈的内容。假设这个 PDA 应该接受一种特定的语言。然后,您将选择三个要放在 satck 上的字符串,以便接受所需的语言。

    例如,如果你把它们都留空,那么接受的语言就是只包含空词的语言。

    如果您选择 $\alpha = \epsilon$,那么第一个子句的两个可能的转换是相同的。如果你选择 $\alpha = S$ 那么第一个转换基本上什么都不做;它只是弹出一个 S 并放回去。

    因此,请寻找您的 PDA 应该接受的语言。

    【讨论】:

    • 感谢您的回答,我不确定我是否还清楚该做什么。你是说我要为 alpha、beta、gamma 分配一个堆栈输入符号(a、b、c、S、T)。然后找到从中接受的语言?
    • 是的。根据您对 PDA 的定义,也可能允许在一次转换中推送多个符号。除非给出“目标”语言,否则这个问题没有任何意义......
    • 我已经很准确地重新写了这个问题,因为它在纸上,但我也发现它很难理解。抱歉,我刚刚意识到上一个问题的 L(G) 等于 (S -> aSc|T)、(T -> bTc| \epsilon),它创建了 a^nb^nb^mc^m。这应该是我试图用 PDA 重新创建的语言吗?
    • 基于此我假设 α 应该是 ac ? β = bc,γ = epsilon。但是有可能以这种方式将两个符号放入堆栈吗?
    • 您的定义应该允许将多个符号压入堆栈。否则它永远不会有多个符号,因为所有的转换都会弹出。您的语法实际上生成 a^nb^mc^(m+n),而不是您给出的语言。然后你就像语法一样工作:\alpha = cSa,\beta cTb,\gamma=\eps。你需要那里的非终端来获得一些递归。举个小例子试试吧!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2010-10-18
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多