Computer science 如何找到以下NPDA接受的语言
我想了解如何找到以下NPDA将接受的语言Computer science 如何找到以下NPDA接受的语言,computer-science,automata,automata-theory,Computer Science,Automata,Automata Theory,我想了解如何找到以下NPDA将接受的语言 M = {Q, Σ, Τ, δ, q0, z, F} Q is a set of state: {q0, q1, q2} Σ is alphabet: {a, b} Τ is stack alphabet: {0, 1, z} δ is transition function z is stack start symbol F is set of final state. 它的过渡函数如下 δ(q0, a, z) = {(q1 , 0), (q2 ,
M = {Q, Σ, Τ, δ, q0, z, F}
Q is a set of state: {q0, q1, q2}
Σ is alphabet: {a, b}
Τ is stack alphabet: {0, 1, z}
δ is transition function
z is stack start symbol
F is set of final state.
它的过渡函数如下
δ(q0, a, z) = {(q1 , 0), (q2 , λ)}
δ(q1, b, 0) = {(q1, 1)}
δ(q1, b, 1) = {(q1, 1)}
δ(q1, a, 1) = {(q2, λ)}
基于这些转换,我将假设最终状态是q2,它接受空堆栈(看起来它甚至去掉了堆栈底部的符号z,这对我来说有点不寻常,但我想这很好) 这些转变是:
δ(q0, a, z) = {(q1 , 0), (q2 , λ)}
δ(q1, b, 0) = {(q1, 1)}
δ(q1, b, 1) = {(q1, 1)}
δ(q1, a, 1) = {(q2, λ)}
让我们一次拿一个
δ(q0,a,z)={(q1,0),(q2,λ)}
意味着如果我们处于初始状态,我们看到a
,我们可以进入状态q1
并用0
替换z
,或者我们可以摆脱z
,进入状态q2
。这实际上是NPDA的接受配置;这意味着NPDA接受空字符串,我们确定的任何语言都必须包含该字符串。因为脱离初始状态的唯一其他方法是查看a
,我们还知道,在我们的语言中,任何非空字符串都必须以a
开头δ(q1,b,0)={(q1,1)}
意味着如果我们现在处于状态q1
,在输入中看到ab
,并且在堆栈顶部有0
,我们可以将堆栈符号更改为1
。一旦我们从q0
进入状态q1
,我们将处于此配置中。请注意,由于没有其他转换将0
放在堆栈顶部,因此这是唯一可以使用此转换的时间;实际上,必须使用它,因为q1
不可接受,我们必须通过此转换来清除堆栈顶部的0
。因此,语言中所有非空字符串必须以ab
开头δ(q1,b,1)={(q1,1)}
意味着如果我们处于状态q1
,在输入中看到ab
,并且在堆栈顶部有a1
,我们可以永远消耗更多的b
s。只要输入中有更多的b
,我们将保持这种配置。但是,我们不一定需要经历这种状态:还有其他的转换将1
放在堆栈的顶部,并且到接受状态的路径可能根本不涉及这种转换。此转换允许我们在上一次转换中看到的所需的b
之后放置任意数量的b
δ(q1,a,1)={(q2,λ)}意味着如果我们处于状态
q1,在输入中看到一个
a,并且在堆栈顶部有一个
1,我们可以擦除堆栈并进入接受状态。这意味着该语言中的任何非空字符串都以一个
a`结尾ab
b
sa
结尾综上所述,我们发现一个正则表达式描述了这种语言:
e+abb*a
。我们不应该对此感到惊讶,因为这个NPDA的堆栈中只包含零到两个元素;由于使用的堆栈数量是恒定的,因此NPDA相当于某些DFA,因此其语言必须是规则的。如果不看到转换,就无法确定此NPDA接受哪种语言。什么是转换函数?对不起。我忘了写转换函数。执行转换f(q0,a,z)=(q1,0)的结果是一个只有一个零的堆栈,还是一个零和堆栈底部的符号?是“0”还是“0z”?所用的符号对我来说是前者,但我只是想确定一下,是的。前者是正确的。非常感谢。