【问题标题】:Turing machine algorithm to count 0's and write how many there were in binary图灵机算法计算 0 并用二进制写出有多少
【发布时间】:2011-06-07 09:18:12
【问题描述】:

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

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

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

嗯……橡皮鸭……

【问题讨论】:

  • 确实需要数数。 8 个零的输出与 7 个零的输出非常不同,在到达结束标记之前您无法知道有多少个。实际上,对于计数的二进制表示中的每一位,您需要一位内存(一种状态)。
  • 不是家庭作业,而是与大学有关(这是我在学习时遇到的一个问题),而计数的问题是如何存放计数器?
  • 你似乎有一个有效的算法。有什么问题?

标签: algorithm binary turing-machines


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 如果我理解正确的话,你基本上是除以二并在每次通过时四舍五入?
  • 是的,完全正确。替换 first 0 将在所有情况下正确向下舍入。
【解决方案2】:

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

Uber Turing Machine 使您能够 编程图灵机 - a 通用理论装置,可以 适应模拟任何逻辑 计算机算法。在...的帮助下 这个软件你可以创建 新算法,以及编辑 已经有人通过 通过打开和更改它们 方便的可视化 IDE。

【讨论】:

    【解决方案3】:

    编辑:我向班维尔让步。

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

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

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

    Bainville 赢得了我的选票。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2021-07-23
      • 1970-01-01
      相关资源
      最近更新 更多