我碰巧需要一个图灵机的算法,它读取一串 0,然后在磁带上写下有多少是二进制的。

我意识到在实践中机器实际上不会计算 0,但我很困惑如何去做。

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

嗯……橡皮鸭……

最佳答案

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

  • 向右移动,直到到达 # 末尾,保持遇到的 0 数量的奇偶校验(最初是 0,然后是 1,然后是 0,...)。用 0 替换每对的第一个 -- 读取被忽略并且不改变奇偶校验。
  • 将奇偶校验写入输出磁带并向左移动(按顺序写入位)
  • 将输入头返回到左侧 # ,并转到 1.

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

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

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

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

    关于algorithm - 图灵机算法计算0并写出二进制数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4661546/

    10-16 18:28