【发布时间】:2020-01-25 19:47:55
【问题描述】:
如何构建图灵机来计算给定 X$Y* 输入的 2 个二进制数的总和?
例如,假设X = 3 和Y = 5。机器的输入将是#011$101*#。最后的状态应该是#1000#。
我们可以假设X 和Y 具有相同的位长度。
【问题讨论】:
标签: binary sum addition turing-machines
如何构建图灵机来计算给定 X$Y* 输入的 2 个二进制数的总和?
例如,假设X = 3 和Y = 5。机器的输入将是#011$101*#。最后的状态应该是#1000#。
我们可以假设X 和Y 具有相同的位长度。
【问题讨论】:
标签: binary sum addition turing-machines
您需要实现full adder。这个问题可能是家庭作业,所以我将提供一个高级概述。图灵机M 具有特殊状态Q(xyc),其中x,y ∈ {0,1,U} 和c ∈ {0,1}。状态Q(xyc)表示X的第ith位为x,Y的第ith位为y,进位为c。符号U 表示相关输入的第 ith 位未知。 Q(Uyc) 的状态 y ∈ {0,1} 是无效的,因为如果 Y 的第 i 位已知,X 的第 ith 位是已知的。算法是这样的:
M的初始状态是Q(UU0)。X 和Y 的第ith 位,并且进位为c。然后M 处于状态Q(UUc)。如果i 大于X 和Y 中的位数,则转到步骤(6)。由于最低有效输入位在步骤 (3) 和 (4) 中被覆盖,因此这种情况很容易检测到。X 的最低有效位x,用$ 覆盖x 并转换到状态Q(xUc)。Y 的最低有效位y,用* 覆盖y 并转换到状态Q(xyc)。Q(UUd),其中d 是新进位,然后转到步骤(2)。这些值由上述链接中的真值表给出。c = 1,请在磁带末尾写上c。请注意,输出是以相反的顺序构造的,因此必须在步骤 (7) 中反转。剩下的工作包括写入状态和用于遍历/操作磁带的转换。
【讨论】: