我正在学习图灵机的测试,我遇到了一个问题,我必须创建一个图灵机作为函数计算器,用于:
f(x,y) = x ^ y 我知道我的磁带输入是这样分开的:
1's of base 0 1's of exponent 我的磁带输出如下
1's of base 0 1's of exponent 0 1's of the computed result我该如何将X和Y放到磁带上?(它可以是多磁带机器)状态图是什么样子的?
注意:我使用一元和1来表示0,0不是作为值而是作为分隔符使用。
所以:
0 = delimiter
1 = 0
11 = 1
111 = 2
1111= 3
11111= 4
etc.发布于 2009-06-23 01:47:17
我猜这里有点,我已经有一段时间没有玩过图灵机模拟器了。首先,我想将任务划分为几个概念性步骤:
来完成
要将一个任务重复执行N次,请将N放到磁带上,执行一次该任务,然后从数字N的末尾减去1。重复此操作,直到数字N从磁带中消失。
希望这足以让你入门。状态机可以或多或少地以这种方式机械地构建。
发布于 2009-06-23 01:55:03
在我自己的图灵伪代码中:
>H19将0写入磁带4
- decrement the number B on Tape 2
这里是应该工作的图灵代码(磁带就像指针,小写字母,输入磁带是i):
# At the start for 2^3
# i: 000111011110000
# ^
_start_ -> *a = 0, start2
start2 [*i==0] -> i++, *a++ = 0, *b++ = 0, start4
start2 [*i==1] -> i++, *a++ = 1, start2
start4 [*i==0] -> *b-- = 0, b--, initc
start4 [*i==1] -> i++, *b++ = 1, start4
initc -> *c++ = 0, *c++ = 1, *c++ = 1, *c-- = 0, mult
# example
# i: 00011101111000
# ^
# a: 001110000
# ^
# b: 001111000
# ^
# c: 00011000
# ^
mult[*b==0]: lastcpy
mult[*b==1]: b--, *d++ = 0, *d++ = 1, rewa
rewa[*a==0]: a++, a++, multcpy
rewa[*a==1]: a--, rewa
multcpy[*c==1]: c++, multcpy2
multcpy[*c==0]: multcpy3
multcpy2[*a==0]: multcpy
multcpy2[*a==1]: *d++ = 1, multcpy2
multcpy3: *d-- = 0, *c = 0, cpydtoc
cpydtoc[*d==1]: d--, *c++ = 1, cpydtoc
cpydtoc[*d==0]: *c-- = 0, mult
lastcpy[*c==1]: *i++ = 1, c--, lastcpy
lastcpy[*c==0]: *i = 0, _finish_
# Should end with
# i: 00011101111011111111100
# ^请检查错误:)
https://stackoverflow.com/questions/1030203
复制相似问题