【问题标题】:Turing machine to calculate sum of 2 binary numbers图灵机计算2个二进制数之和
【发布时间】:2020-01-25 19:47:55
【问题描述】:

如何构建图灵机来计算给定 X$Y* 输入的 2 个二进制数的总和?

例如,假设X = 3Y = 5。机器的输入将是#011$101*#。最后的状态应该是#1000#

我们可以假设XY 具有相同的位长度。

【问题讨论】:

    标签: binary sum addition turing-machines


    【解决方案1】:

    您需要实现full adder。这个问题可能是家庭作业,所以我将提供一个高级概述。图灵机M 具有特殊状态Q(xyc),其中x,y ∈ {0,1,U}c ∈ {0,1}。状态Q(xyc)表示X的第ith位为xY的第ith位为y,进位为c。符号U 表示相关输入的第 ith 位未知。 Q(Uyc) 的状态 y ∈ {0,1} 是无效的,因为如果 Y 的第 i 位已知,X 的第 ith 位是已知的。算法是这样的:

    1. M的初始状态是Q(UU0)
    2. 假设正在添加XY 的第ith 位,并且进位为c。然后M 处于状态Q(UUc)。如果i 大于XY 中的位数,则转到步骤(6)。由于最低有效输入位在步骤 (3) 和 (4) 中被覆盖,因此这种情况很容易检测到。
    3. 找到X 的最低有效位x,用$ 覆盖x 并转换到状态Q(xUc)
    4. 找到Y 的最低有效位y,用* 覆盖y 并转换到状态Q(xyc)
    5. 在磁带末尾写入适当的总和,转换到状态Q(UUd),其中d 是新进位,然后转到步骤(2)。这些值由上述链接中的真值表给出。
    6. 如果是c = 1,请在磁带末尾写上c
    7. 将计算值的反面复制到磁带的开头。清除剩余的磁带。

    请注意,输出是以相反的顺序构造的,因此必须在步骤 (7) 中反转。剩下的工作包括写入状态和用于遍历/操作磁带的转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2019-10-11
      • 2011-06-07
      • 2021-12-22
      • 2016-08-16
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多