如何设计一个图灵机来除两个数字?
Posted
技术标签:
【中文标题】如何设计一个图灵机来除两个数字?【英文标题】:How to design a Turing machine for division of two numbers? 【发布时间】:2019-12-24 20:38:26 【问题描述】:机器将2个自然数(a,b)作为一元形式的输入,输出整数商和整数除法a/b的余数。 磁带上的初始状态和最终状态是什么?功能图会是什么样子?
提前致谢。
【问题讨论】:
我投票结束这个问题,因为堆栈溢出不是代码编写服务。即使对于明智的计算架构也是如此 我只是寻求指导,因为我几乎找不到关于这个特定主题的信息。 @Panagiotis Iatrou 您应该使用您对数学和图灵机的了解来尝试弄清楚——您已经掌握了足够的信息来这样做。我给你一个提示:使用长除法。 【参考方案1】:这里使用的设计如下:
从表示 a 的磁带部分中划掉 b 个 1 的实例,并在每次执行此操作时递增表示商 q 的磁带的新部分。
如果 b 中的 1 比用于表示 a 的部分中的 1 多,则停止除法;剩下的符号代表余数,无论您当前的商数是多少,这就是答案
实现可能会执行以下操作:
将输入设为#11...1011...1#,其中第一个字符串 1 表示一元中的 a,第二个字符串表示一元中的 b,# 为空白,磁带头最初开始在最左边 1;
立即在磁带末尾写一个 Q;这之后的任何东西都是商
检查b是否>a;如果是这样,请运行一些例程以在终止之前以漂亮的格式重写商和余数。通过在 0 上来回弹跳检查并临时标记单元格对,然后将它们改回 1s。
否则,将 b 最左边的 1 实例更改为 X,在最右边的 1 之后添加 1,然后从步骤 3 开始重复。通过在 0 上来回弹跳并临时标记来标记 b 实例组成 b 的 1s 所以你不要重复计算;然后,将它们改回 1s。
例子:
initial tape: #11111011#
after step 2: #11111011Q#
after step 3: (same)
after step 4: #XX111011Q1#
after step 3: (same)
after step 4: #XXXX1011Q11#
after step 3: #1101# (formatted)
【讨论】:
以上是关于如何设计一个图灵机来除两个数字?的主要内容,如果未能解决你的问题,请参考以下文章