图灵机 - 生成数字序列

时间:2013-02-13 16:17:35

标签: numbers sequence turing-machines

http://morphett.info/turing/turing.html

如何创建循环数字序列,例如:

... 01011011101111011111

所以基本上添加一个零,然后加1,然后加零,然后在前一个数的顶部加1。

1 个答案:

答案 0 :(得分:1)

在录像带上写下01。向右移动一个空格。如果您正在查看零,请向左扫描,直到看到零。向右移动一个空格。如果您正在查看一个,请将其替换为两个并向右移动,直至看到零;然后继续向右移动,直到你又一个零。用一个替换这个零。然后,向后移动,直到看到两个。用一个替换两个。向右移动一个;如果你正在看一个,重复用两个替换的过程再回来。最终,你将耗尽之前的1s,所以当你向右移动时你会看到零。在这种情况下,向右移动到下一个零,并用一个替换它。循环整个过程(减去“写01部分”以获得更长的字符串。

这背后的直觉是直截了当的。如果向右移动并看到零,则向左移动两个零,在找到零之后复制最后一个和倒数第二个零之间的所有零,然后再添加一个零。这两个用作跟踪您正在复制的字符串中的位置的方法。基本的想法是合理的,但你应该尝试写出状态和转换,以使其严格。

示例:

>
^
>0
 ^
>01
  ^
>010
   ^
>010
 ^
>010
  ^
>020
   ^
>0200
    ^
>0201
   ^
>0201
  ^
>0101
   ^
>0101
    ^
>01010
     ^
>010110
      ^