在设计接受语言的图灵机时,我需要一些帮助 L = {a ^ n + 1 b ^ 2n c ^ 3n:n> = 0}
答案 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)