一元可以用在图灵机吗?

时间:2016-12-01 01:37:49

标签: turing-machines

给定一元中的数字(0 = 1,1 = 11,2 = 111,3 = 1111,...),在其后留一个空白符号,并写入相同数字的二进制表示(0 = 0) ,1 = 1,2 = 10,3 = 11,4 = 100,......)。可以接受(不要求)以相反的顺序写入数字。完成后,TM应切换到接受状态。无需验证输入,假设输入是100%的一元数,并且磁带上没有其他内容。

1 个答案:

答案 0 :(得分:0)

这是一个基于Welbog提示的解决方案。

TM将在1s结束后写入0个空格开始。我们知道磁带上至少会有一个1。然后,我们可以为我们在第一个空白左侧看到的每个1添加一个二进制表示。我们也可以通过将它们更改为0来记住我们已经处理过的一元1。如果我们想把磁带放回原来的状态,我们就可以在二进制表示的左边的0上写回1。

Q    T    Q'    T'    d
-----------------------
q0   1    q0    1     R    // scan right to first blank space
q0   #    q1    #     R    // after unary. then, write a 0
q1   #    q2    0     L    // to start the binary.

q2   #    q3    #     L    // scan left past any binary data
q2   0    q2    0     L    // to get to the blank separating
q2   1    q2    1     L    // unary and binary

q3   #    hA    #     R    // scan left for another unary
q3   0    q3    0     L    // digit, ignoring ones that have
q3   1    q4    0     R    // been processed. if done, halt.

q4   #    q5    #     R    // scan right to the blank separating
q4   0    q4    0     R    // unary and binary

q5   #    q2    1     L    // add one to the binary representation
q5   0    q2    1     L    // by toggling bits until you toggle a
q5   1    q5    0     R    // zero to a one, completing the addition

示例:

#111####  =>  #111####  =>  #111####  =>  #111####  => (next line)
 ^q0            ^q0            ^q0            ^q0

#111####  =>  #111#0##  =>  #111#0##  =>  #110#0##  => (next line)
     ^q1          ^q2          ^q3            ^q4

#110#0##  =>  #110#1##  =>  #110#1##  =>  #110#1##  => (next line)
     ^q5          ^q2          ^q3          ^q3

#100#1##  =>  #100#1##  =>  #100#1##  =>  #100#0##  => (next line)
   ^q4            ^q4            ^q5            ^q5

#100#01#  =>  #100#01#  =>  #100#01#  =>  #100#01#  => (next line)
     ^q2          ^q2          ^q3          ^q3

#100#01#  =>  #000#01#  =>  #000#01#  =>  #000#01#  => (next line)
 ^q3            ^q4            ^q4            ^q4

#000#01#  =>  #000#11#  =>  #000#11#  =>  #000#11#  => (next line)
     ^q5          ^q2          ^q3          ^q3

#000#11#  =>  #000#11#  =>  #000#11#
 ^q3          ^q3            ^hA