图灵机基本操作

时间:2017-12-04 11:35:30

标签: binary turing-machines turing

在这个问题中,您需要构建多个图灵机。对于每台图灵机, 提供高级描述如何工作并提供图形表示。 (你可以走了 如果图表完整,则退出正式定义。)

a)写一台图灵机 Ť INC 可以将1添加到存储在磁带上的二进制编码数字 图灵机。二进制数由符号括起 $ 你可以假设 二进制数以0开始(即,没有要考虑的溢出)。例如, 输入 $ 0100 $ 被改造了 Ť INC 到 $ 0101 $ 和输入 $ 0111 $ 被改造了 Ť INC 到 $ $ 1000 。图灵机首先从头部开始 $ 留下号码。

b)写一台图灵机 Ť 十二月 可以从存储在其上的二进制编码数中减去1 图灵机的磁带。二进制数由符号括起 $ 。例如, 输入 $ 0100 $ 被改造了 Ť 十二月 到 $ 0011 $ 和输入 $ 0111 $ 被改造了 Ť 十二月 到 $ 0110 $ 。图灵机首先从头部开始 $ 左边的数字。 提示:您可以反转该数字的所有位,然后在数字中加1,然后反转所有位 这个号码。

c)写一台图灵机 Ť 加 可以在磁带上添加两个二进制编码的数字 图灵机。二进制数每个都用符号括起来 $ 你可以假设 二进制数具有足够数量的前导0来保持总和(即,那里) 没有溢出考虑)。例如,输入 $ 0100 $ 0010 $ 被改造了 Ť 加 到 $ $ 0000 $ 0110 ,即第一个数字被添加到第二个数字。

提示:你可以建造 Ť 加 在......之外 Ť INC 和 Ť 十二月 :虽然第一个数字不为零,但减少 第一个数字并递增第二个数字。请将您的州命名为 明确他们属于哪个部分的文字描述。 您可能会发现编写一个Haskell程序来模拟您的图灵机是很有用的(即,以下内容 类中显示的示例)。这样您就可以对图灵机进行测试以验证它 工作正常。随意提交您的Haskell代码,以便我们验证您的设计 图灵机。 请注意,您有责任正确记录事项。如果你交出我们做不到的东西 明白,你可能会得到零分。

1 个答案:

答案 0 :(得分:0)

(a)要在二进制数字中加1,你从最低有效数字开始(看起来这是你磁带上的最后一个数字),带进位加1,向左移动,然后用进位重复前一步直到进位为0.保证进位至少为0,因为问题假定你从磁带前面的0开始。 TM可能看起来像这样:

Q    T    Q'    T'    D
-----------------------
// read the leading $
// reject if not there
q0   $    q1    $     right
q0   0    hR    0     same
q0   1    hR    1     same

// go to the last digit
q1   $    q2    $     left
q1   0    q1    0     right
q1   1    q1    1     right

// add 1 by swapping digit values
// reject if overflow
// accept if carry becomes 0
q2   $    hR    $     same
q2   0    hA    1     same
q2   1    q2    0     left

b)要从二进制数中减去1,你从最低有效数字开始,用借位减1,向左移动,然后从上一步借用重复,直到借用0为止。这可能是一个技巧问题或它是不适当的:给定这个编码中的数字,即使有来自(a)部分的假设,也不能保证可以减去一个:当呈现零编码时,所需的行为是TM未定义。假设数字大于零:

Q    T    Q'    T'    D
-----------------------
// read the leading $
// reject if not there
q0   $    q1    $     right
q0   0    hR    0     same
q0   1    hR    1     same

// go to the last digit
q1   $    q2    $     left
q1   0    q1    0     right
q1   1    q1    1     right

// subtract 1 by swapping digit values
// reject if underflow
// accept if borrow becomes 0
q2   $    hR    $     same
q2   0    q2    1     same
q2   1    hA    0     left

c)忘记提示并直接实现二进制加法。没有说明,但严重暗示数字具有相同的位数,或者至少第二个数字具有比第一个更多的数字。添加两个数字的最低有效数字,带进位,标记第一个和第二个数字的数字,并在数字用完时完成。然后,取消标记数字。以下是您的TM应如何处理该示例:

$0100$0010$
$0100C0010$
$010AC0010$
$010AC001A$
$01AAC001A$
$01AAC00BA$
$0BAAC00BA$
$0BAAC0BBA$
$ABAAC0BBA$
$ABAACABBA$
$0BAACABBA$
$00AACABBA$
$000ACABBA$
$0000CABBA$
$0000$ABBA$
$0000$0BBA$
$0000$01BA$
$0000$011A$
$0000$0110$