繁体   English   中英

图灵机计算2个二进制数之和

[英]Turing machine to calculate sum of 2 binary numbers

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

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

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

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

  1. M的初始状态是Q(UU0)
  2. 假设XYi 位被添加并且进位是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) 中颠倒。 剩余的工作包括写入状态和用于遍历/操作磁带的转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM