turing-machines - 乘法和模图灵机

标签 turing-machines

我需要帮助设计一个图灵机来计算以下 f(x,y) = x*y mod 4 .如何在二进制基础中解决此问题 $x$$y$有两个位?

最佳答案

可能会稍微优化,但它确实有效:

假设 - 输入(仅)由两个二进制数组成(前导 0,因此 01 代替 1 和 00 代替 0),由空白符号 (_) 分隔。结果是一个带前导的二进制数,代表 x * y mod 4。

转换表(状态 current_symbol new_symbol move_direction new_state):

0 0 0 r 0
0 1 1 r 0
0 _ _ r 1
1 0 0 r 1
1 1 1 r 1
1 _ x r 2
2 _ 0 r 3 
3 _ 0 l 4
4 0 0 l 4
4 x x l 5
5 0 0 l 5
5 1 1 l 5
5 x x l 5
5 _ _ l 6
6 1 0 r 7
6 0 0 l 16
7 0 0 r 7
7 1 1 r 7
7 _ _ r 7
7 x x l 8
8 0 0 l 9
8 1 1 r 10
9 0 0 l 5
9 1 1 r 14
10 x x r 10
10 0 0 r 11
10 1 1 r 11
11 0 1 l 12
11 1 0 l 18
12 0 0 l 12
12 1 1 l 12
12 x x l 13
13 0 0 l 9
13 1 1 l 9
14 0 0 r 14
14 1 1 r 14
14 x x r 15
15 0 1 r 5
15 1 0 r 5
16 0 _ r 19
16 1 0 r 17
17 0 1 r 7
18 0 1 l 12
18 1 0 l 12
19 0 _ r 19
19 1 _ r 19
19 _ _ r 19
19 x _ r halt

粗略状态说明:
  • 0 移到第一个数字的右侧(向右移动)
  • 1 移动到第二个数字的右侧(并终止 - 添加 x)-
  • 2 写第一个结果零
  • 3 写第二个结果零
  • 4 移到 x(向左)
  • 5 移动到第一个数字的右边(向左)
  • 6 右数减一
  • 7 递减 - 现在复制号码 - 移动到右侧号码的左侧数字
  • 8 读取右边数字的左边数字
  • 9 读取正确号码的正确数字
  • 正确数字的 10 位右数为 1 - 向结果右侧移动以递增
  • 11 增量结果
  • 12 移动到 x
  • 13 移动读取右边数字的右边数字
  • 14 移动到结果的左边数字以递增
  • 15 增加正确的数字(注意 - 因为它是 mod 4,我们只是翻转)
  • 16 当试图减少左边的数字时 - 右边的数字是 0 - 检查是否为 00?
  • 17 我们已经将左边的数字减少了 2,现在增加到总数 -1
  • 18 当递增结果左数为 0 时 - 结转
  • 19清理
  • 关于turing-machines - 乘法和模图灵机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836596/

    相关文章:

    theory - 说不确定的图灵机可以在多项式时间内求解NP有什​​么后果?

    automata - 设计图灵机的状态表

    .net - .NET 的正则表达式图灵完整吗?

    memory-leaks - 图灵机中的内存泄漏,由 Free Pascal 编译

    algorithm - 决定 {0^2^n; 的图灵机; n>0} 这不是普遍接受的

    computer-science - 图灵机与冯·诺依曼机

    performance - 如何计算图灵机的运行时间?

    turing-machines - 枚举器的图灵机图

    grammar - 构建图灵机以按顺序列出所有整数?

    computation-theory - 是否有任何非 RE-hard 的递归可枚举问题?