3

我碰巧需要一个用于图灵机的算法,它读取一串 0,然后在磁带上写入二进制数。

我意识到在实践中机器实际上不会计算 0,但我对如何做到这一点感到非常困惑。

我想首先我需要标记二进制数以 X 或其他东西开头的位置,然后只为第一个 0 写一个 1,如果最低有效位为 0,则为后面的每个 0 写一个1 但如果是 1 呢?也许把它变成 0 并继续把所有的 1 变成 0 直到我找到一个 0 或空白变成 1?再说一次,在那种情况下,不管LSB如何,都是一样的,因为我会做同样的事情,只有0是第一个位置......

嗯……橡皮鸭……

4

3 回答 3

9

假设输入磁带是#00000000000#,其中初始读取位置是第一个 0。

  1. 向右移动直到到达终点#,保持遇到的数量的奇偶性0(最初是 0,然后是 1,然后是 0,...)。0将每对中的第一个替换为-. 读取被忽略并且-不改变奇偶校验。

  2. 将奇偶校验写入输出磁带并向左移动(按顺序写入位)

  3. 将输入头返回到左侧#,然后转到 1。

在第一遍结束时,输入磁带将为#-0-0-0-0-0-#,输出为1

在第二遍结束时:#---0---0---#11

在第三遍结束时:#-------0---#011

在第四遍结束时:#-----------#1011

于 2011-01-12T13:48:45.330 回答
0

查看这个图灵机模拟器及其二进制计数示例程序:

Uber Turing Machine使您能够对 Turing 机进行编程 - 一种通用的理论设备,可以适应模拟任何计算机算法的逻辑。借助该软件,您可以创建新算法,以及通过方便的可视化 IDE 打开和更改某人已经准备好的算法。

优步图灵机截图

于 2011-01-12T16:33:39.403 回答
0

编辑:我承认贝恩维尔。

昨晚我弄清楚了我想做什么,它需要两个单独的图灵机,那可能是作弊。

第一台机器的磁头将在输入磁带上运行,如果第二台机器扫描到 0,则只需启动第二台机器。

第二台机器只是一台加法机,它会将 1 加到当前数字上,这很容易做到,它只是一个长加法,你可以创建一个状态,说有余数并继续向左移动,直到你达到零(并将其替换为 1)或找到一个空白点(并创建一个 1)。

班维尔赢得了我的选票。

于 2011-01-11T20:15:39.817 回答