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