[英]Turing machine to calculate sum of 2 binary numbers
如何构建图灵机来计算给定X$Y*
输入的 2 个二进制数的总和?
例如,假设X = 3
和Y = 5
。 机器的输入将是#011$101*#
。 最后的状态应该是#1000#
。
我们可以假设X
和Y
具有相同的位长度。
您需要实现一个全加器。 这个问题可能是家庭作业,所以我将提供一个高层次的概述。 图灵机M
具有特殊状态Q(xyc)
,其中x,y ∈ {0,1,U}
和c ∈ {0,1}
。 状态Q(xyc)
表示X
第i 位是x
, Y
第i 位是y
并且进位是c
。 符号U
表示相关输入的第i 位未知。 状态Q(Uyc)
其中y ∈ {0,1}
是无效的,因为第i个位X
如果存在第i个位是已知的Y
是已知的。 算法是这样的:
M
的初始状态是Q(UU0)
。X
和Y
第i 位被添加并且进位是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) 中颠倒。 剩余的工作包括写入状态和用于遍历/操作磁带的转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.