📜  图灵机的语言{www | w∈{a,b}}

📅  最后修改于: 2021-07-05 06:25:13             🧑  作者: Mango

先决条件–图灵机
设计一个图灵机的它包含W的连续恰好3次重复的字符串。

使用的方法:
首先,我们将找到第一个w与第二个w分离的位置。
现在,我们将匹配第一个和第二个w。如果两个都匹配,则第二个w字符串将转换为$字符串。

然后,我们将匹配第一个和第三个w。如果两个都匹配,则第三个w字符串将转换为$字符串。如果字符串达到暂停状态H,则它将被接受。

例子 –

Input: ababab
Output: Accepted
Input: abbabbabb
Output: Accepted
Input: ^ (Empty string)
Output: Accepted
Input: aba
Output: Not accepted 

步骤1:
如果符号是$,则将其替换为$,然后向右移动。

转到状态Q1并执行步骤2。

第2步:
如果符号是a,则将其替换为A并向右移动,或者

如果符号是b,则将其替换为B并向右移动。

转到状态Q2并执行步骤3。

————————————————

如果符号是A,则将其替换为A并向左移动,或者

如果符号是B,则将其替换为B并向左移动。

转到状态Q6并执行步骤7。

————————————————

如果符号是$,则将其替换为$,然后接受字符串。

进入最终状态H。

步骤3:
如果符号是a,则将其替换为a并向右移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向右移动,保持相同状态。

————————————————

如果符号是A,则将其替换为A,然后向左移动,或者

如果符号是B,则将其替换为B,然后向左移动,或者

如果符号是$,请用$代替,然后向左移动。

转到状态Q3并执行步骤4。

第四步:
如果符号是用A代替,然后向左移动,或者

如果符号是b,则将其替换为B,然后向左移动,

转到状态Q4并执行步骤5

步骤5:
如果符号是用A代替,然后向左移动,或者

如果符号是b,则将其替换为B,然后向左移动,

转到状态Q5并执行步骤6

步骤6:
如果符号是a,则将其替换为a并向左移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向左移动,保持相同状态。

————————————————

如果符号是A,则将其替换为A并向右移动,或者

如果符号是B,则将其替换为B并向右移动,或者

转到状态Q1并执行步骤2。

步骤7:
如果符号是A,则将其替换为a并向左移动,保持相同的状态,或者

如果符号为B,则将其替换为b并向左移动,保持相同状态

————————————————

如果符号为$,则将其替换为$,然后向右移动。

转到状态Q7,然后执行步骤8。

步骤8:
如果符号是a,则将其替换为A并向右移动。

转到状态Q9并执行步骤10。

————————————————

如果符号是b,则将其替换为B并向右移动。

转到状态Q8并执行步骤9。

————————————————

如果符号是$,则将其替换为$,然后向左移动。

转到状态Q11并执行步骤12。

步骤9:
如果符号是a,则将其替换为a并向右移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向右移动,保持相同状态,或者

如果符号为$,则将其替换为$,然后向右移动,保持在同一状态

————————————————

如果符号为B,则将其替换为$,然后向左移动。

转到状态Q10并执行步骤11。

步骤10:
如果符号是a,则将其替换为a并向右移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向右移动,保持相同状态,或者

如果符号是$,则将其替换为$,然后向右移动,保持相同状态。

————————————————

如果符号是A,则将其替换为$,然后向左移动。

转到状态Q10并执行步骤11。

步骤11:
如果符号是a,则将其替换为a并向左移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向左移动,保持相同的状态,或者

如果符号是$,则将其替换为$,然后向左移动。

————————————————

如果符号是A,则将其替换为A并向右移动,或者

如果符号是B,则将其替换为B并向右移动。

转到状态Q7,然后执行步骤8。

步骤12:
如果符号是A,则将其替换为a并向左移动,保持相同的状态,或者

如果符号是B,则将其替换为b并向左移动,保持相同的状态。

————————————————

如果符号是$,则将其替换为$,然后向右移动。

转到状态Q12并执行步骤13。

步骤13:
如果符号是a,则将其替换为A并向右移动。

转到状态Q14并执行步骤15。

————————————————

如果符号是b,则将其替换为B并向右移动。

转到状态Q13并执行步骤14。

————————————————

如果符号是$,则将其替换为$,然后接受字符串。

进入最终状态H。

步骤14:
如果符号是a,则将其替换为a并向右移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向右移动,保持相同状态,或者

如果符号是$,则将其替换为$,然后向右移动,保持相同的状态。

————————————————

如果符号为B,则将其替换为$,然后向左移动。

转到状态Q15并执行步骤16。

步骤15:
如果符号是a,则将其替换为a并向右移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向右移动,保持相同状态,或者

如果符号是$,则将其替换为$,然后向右移动,保持相同的状态。

————————————————

如果符号是A,则将其替换为$,然后向左移动。

转到状态Q15并执行步骤16。

步骤16:
如果符号是a,则将其替换为a并向左移动,保持相同的状态,或者

如果符号是b,则将其替换为b并向左移动,保持相同的状态,或者

如果符号是$,则将其替换为$,然后向左移动。

————————————————

如果符号是A,则将其替换为A并向右移动,或者

如果符号是B,则将其替换为B并向右移动。

转到状态Q12并执行步骤13。

符号的含义-

R- move right

L- move left

a- character a

b- character b

A- character A

B- character B 

例子:
我们必须测试图灵机上的字符串“ ababab”。

-> $ababab$ 
-> $Ababab$ 
-> $AbabaB$ 
->$AbabAB$ 
-> $ABabAB$ 
-> $ABaBAB$ 
-> $ABABAB$ 
-> $AbABAB$ 
-> $abABAB$ 
-> $AbABAB$ 
-> $Ab$BAB$ 
-> $AB$BAB$ 
-> $AB$$AB$ 
-> $Ab$$AB$ 
-> $ab$$AB$ 
-> $Ab$$AB$ 
-> $Ab$$$B$ 
-> $AB$$$B$ 
-> $AB$$$$$ (Accepted)