设计一种接受语言L = {a ^ n + 1 b ^ 2n c ^ 3n:n> = 0}的图灵机

时间:2019-05-29 06:37:13

标签: automata finite-automata turing-machines automata-theory turing

在设计接受语言的图灵机时,我需要一些帮助 L = {a ^ n + 1 b ^ 2n c ^ 3n:n> = 0}

2 个答案:

答案 0 :(得分:1)

有很多正确的方法可以做到这一点。我将只介绍其中的一个,希望能说明解决这些问题的有用方法。

首先,我们注意到三个段之间的共性n。我们将一次将每个部分的符号划掉,以确保它们之间具有正确的关系。首先,我们可以验证a和b之间的关系是正确的。然后,我们可以检查a和c之间的关系。如果两者都正确,那么我们就完成了。

首先,让我们摆脱a中讨厌的“ +1”。这意味着无论n是多少,我们至少都有一个a。因此,我们可以将a更改为X。现在,其余输入应具有n的a实例,2n的b实例和3n的c实例。如果我们没有a,我们可以立即停止拒绝;如果我们至少没有一个,则不能有n + 1个实例。

现在,如果存在更多的a实例,则通过在其位置上写A来将其划掉,并通过在其位置上写B来使b的两个实例划掉。然后,回去寻找a的更多实例,来回弹跳,直到没有a的更多实例为止。然后,验证没有更多的b实例;如果是这样,则b的实例是a的两倍,并且前两个部分的关系正确。如果在任何时候您没有足够的b来抵消,或者在用完a之后仍然有b,那么您可以安全地暂停拒绝。

接下来,您可以对A和c的实例执行相同的操作,只需将c的三个实例(而不是两个)划掉即可。如果我们发现A与c同时耗尽,我们就完成了并停止接受。

过渡可能看起来像这样:

Q    T    Q'    T'    d        comment
q0   a    q1    X     right    account for +1

q1   a    q2    A     right    n>0 case, continue
q1   #    hA    #     same     n=0 case, accept

q2   a    q2    a     right    skip uncrossed a
q2   B    q2    B     right    skip crossed b
q2   b    q3    B     right    find first uncrossed b, cross it

q3   b    q4    B     left     find next b, cross it

q4   B    q4    B     left     find last uncrossed a
q4   a    q2    A     right    cross it
q4   A    q4    A     left     skip crossed a, if any
q4   X    q5    X     right    ran out of a to cross

q5   A    q5    A     right    skip crossed a
q5   B    q5    B     right    skip crossed b
q5   c    q6    c     left     verify existence of some c

q6   C    q6    C     left     skip crossed c
q6   B    q6    B     left     skip crossed b
q6   A    q7    a     right    find last crossed a, uncross
q6   X    q10   X     right    ran out of crossed a

q7   a    q7    a     right    skip uncrossed a
q7   B    q7    B     right    skip crossed b
q7   C    q7    C     right    skip crossed c
q7   c    q8    C     right    find first uncrossed c, cross
q8   c    q9    C     right    cross 2nd uncrossed c
q9   c    q6    C     left     cross 3rd uncrossed c

q10  a    q10   a     right    skip uncrossed a
q10  B    q10   B     right    skip crossed b
q10  C    q10   C     right    skip crossed c
q10  #    hA    #     same     accept if no leftover symbols until end

答案 1 :(得分:1)

由于我们不应该解决您的作业:),因此我在JFLAP上解决了以下语言,您可以为您的语言进行一些更改。逻辑相同,您需要添加几个状态。 L = {a ^ n + 1 b ^ 2n:n> = 0}

the solution on JFLAP