先决条件–图灵机
设计一个图灵机的它包含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)