[英]Turing machine that adds 2-digit binary numbers
嘿,正如标题所说,我正在尝试创建一个添加 2 个 2 位二进制数的图灵机。
到目前为止,我设法使它适用于 10 + 01 的情况,但我不能使它适用于所有数字组合。 有人可以帮忙吗? 到目前为止,这是我的代码。
输入格式为 X NUM1 NUM2 X NUM3 NUM4 (x10x01):
State Read Write Direction NextState
0 X X R 0
0 1 1 R 0
0 0 1 L 1
1 X 0 L 1
1 0 0 L 1
1 1 0 L 2
2 X 0 R 2
2 0 0 R 2
2 1 1 R 0
3 _ _ N HALT
您 TM 执行以下操作:
这个逻辑似乎没有添加任何东西。 在输入x10x01
上,它将:
x10x01
,state 0,头在 position 1 ( x
)。 向右移动直到我们读取 0,写入 1,向左移动,然后 go 到 state 1。x11x01
,state 1,头在 position 2 ( 1
)。 向左移动直到我们读到 1,然后写入 0,向右移动,然后 go 到 state 2。x01x01
,state 2,头在 position 3 ( 1
)。 向右移动直到我们读到 1,向右移动和 go 到 state 0。x01x01
,state 0,头在 position 4 ( x
)。x01x11
,state 1,头在 position 4 ( x
)。x00x11
,state 2,头在 position 4 ( x
)。x00x11
,state 0,头在 position 6( 1
)。 此时机器将永远循环或崩溃,具体取决于您的实现细节,因为它将读取未初始化的磁带。 虽然看起来机器添加了01
和10
以获得11
,但实际上它只是随意地将1
s 和0
s 左右移动。
实际添加的 TM 需要做的事情比你的机器做的要多。 具体来说:
由于您只担心两位数字,因此您可以跳过标记数字,而只需使用其他状态来跟踪您正在使用的位。
您也可以对所有可能的输入进行硬编码(只有 16 个),但这可能不符合您分配的作业的精神。
例如,要实际添加两个一位数,您可能需要这样的算法:
在此示例中,状态 1 和 2 跟踪第一个数字是 0 还是 1。状态 3、4 和 5 将数字相加。 State 3 是当两者都是 0。State 4 是当一个是 1。State 5 是当两者都是 1 时。
对应的 TM 可能如下所示:
State Read Write Direction NewState
0 X X R 0
0 0 0 R 1
0 1 0 R 2
1 X X R 1
1 0 0 N 3
1 1 1 N 4
2 X X R 2
2 0 0 N 4
2 1 1 N 5
3 _ 0 N Halt
4 _ 1 N Halt
5 _ 1 R 3
我将由您来决定如何将这个概念的两次迭代连接在一起以添加两个 2 位数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.