如何设计除以两个数的图灵机?

How to design a Turing machine for division of two numbers?

本机以一元形式输入2个自然数(a,b),输出整数除a/b的整数商和余数。 磁带上的初始状态和最终状态是什么?功能图会是什么样子?

提前致谢。

此处使用的设计如下:

  1. 从表示 a 的纸带部分中划掉 1 的 b 个实例,并在每次执行时递增表示商 q 的纸带的新部分。

  2. 如果 b 中的 1 多于用于表示 a 的部分中剩余的 1,请停止除法;剩余的符号代表余数,无论您当前的商数是多少,这就是答案

实现可能会执行以下操作:

  1. 输入#11...1011...1# 其中第一串1s表示一元a,第二串1表示一元b,#为空格,磁带头最初从最左边的 1 开始;

  2. 马上去磁带末尾写个Q;这之后的任何东西都是商

  3. 检查是否b > a;如果是这样,运行 一些例程在终止之前以漂亮的格式重写商和余数。通过在 0 上来回跳动并临时标记单元格对进行检查,然后将它们改回 1s。

  4. 否则,把1最左边的b个实例改成X,去最右边的1后面加一个1,然后从第3步开始重复。 0 并临时标记组成 b 的 1,这样你就不会重复计算;然后,将它们改回 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)