《计算模型导引》第五章习题¶
1¶
习题5.1
构造机器计算函数 f(x,y,z)=y.
解:
主要思想是先后抹除\overline x,\overline z最后移到\overline y的头.
机器如下:
0 | 1 | 解释 | |
---|---|---|---|
1 | 0R2 | 0R1 | 抹除\overline x并指向\overline y头 |
2 | 0R3 | 1R2 | 移动到\overline z头 |
3 | 0L4 | 0R3 | 抹除\overline z |
4 | 0L4 | 1L5 | 越过\overline y的最后一个1 |
5 | 0R6 | 1L5 | 移到\overline y头 |
2¶
习题5.2
构造机器 \boxed{\text{copy}_1} 使 \boxed{\text{copy}_1}|0\underset{\uparrow}{1^x}0\cdots\twoheadrightarrow 01^x0\underset{\uparrow}{1^x}0\cdots.
解:
主要思路是逐个减少第一个1
,每次减少一个,在后面各增加一个1
。最后,第一个1
消失,其后增加了两个1
。
设计机器 M 实现如下功能:
M|1:0\cdots 0\underset{\uparrow}{1^{l+1}}01^k01^k0\cdots \twoheadrightarrow 1:0\cdots 0\underset{\uparrow}{1^l}01^{k+1}01^{k+1}0\cdots
M|1:0\cdots 0\underset{\uparrow}{1}01^k01^k0\cdots \twoheadrightarrow u:0\cdots 0\underset{\uparrow}{1^{k+1}}01^{k+1}0\cdots
其中 k\ge 0,u 为停机状态。
0 | 1 | 解释 | |
---|---|---|---|
1 | 0R2 | 减少第一个1 |
|
2 | 0R3 | 1R12 | 发现是0 ,即第一个1 空,准备停;否则循环 |
3 | 1R4 | 1R3 | 还需要增加第二个和第三个1 ,先越过第二个1 ,将末尾的0变为1 |
4 | 0R5 | 到达第三个1 ,将第一个1变为0 |
|
5 | 1R6 | 1R5 | 越过第三个1 ,将末尾的0变为1 |
6 | 1L7 | 由于第一个1变为0,这里需要再添加一个1 | |
7 | 0L8 | 1L7 | 左移过第三个1 |
8 | 0R9 | 1L8 | 左移过第二个1 |
9 | 到第二个1 头,停机 |
||
10 | |||
11 | |||
12 | 0R13 | 1R12 | 越过第一个1 ,移动到第二个1 |
13 | 1R14 | 1R13 | 越过第二个1 ,将末尾的0变为1 |
14 | 0R15 | 到达第三个1 ,将第一个1变为0 |
|
15 | 1R16 | 1R15 | 越过第三个1 ,将末尾的0变为1 |
16 | 1R17 | 由于第一个1变为0,这里需要再添加一个1 | |
17 | 0L18 | 1L18 | 准备向左移动 |
18 | 0L19 | 1L18 | 左移过第三个1 |
19 | 1L20 | 准备左移 | |
20 | 0L21 | 1L20 | 左移过第二个1 |
21 | 0R1 | 1L21 | 左移到第一个1 ,到状态1,继续循环 |
3¶
习题5.3
构造机器计算函数 f(x,y)=x\times y.
解:
设结果为 z。
主要思路是逐个减少 \overline x ,每次减少一个,将 \overline z 增加 \overline y。在计算 z+y 时,用 0 的位置记录加法的进度。
0 | 1 | 解释 | |
---|---|---|---|
1 | 0R10 | 0R2 | 减少一个\overline x |
2 | 0R3 | 1R2 | 右移过\overline x |
3 | 0L8 | 0R4 | 遇到1,将\overline y中该位置变为0;遇到0,表示加完\overline y |
4 | 0R5 | 1R4 | 右移过\overline y |
5 | 1L6 | 1R5 | 右移过\overline z,末尾添加1 |
6 | 0L7 | 1L6 | 左移过\overline z |
7 | 1R3 | 1L7 | 左移到\overline y中的0位置,将其置为1 |
8 | 0L9 | 1L8 | 左移过\overline y |
9 | 0R1 | 1L9 | 左移过\overline x |
10 | 0R11 | 0R10 | 擦除\overline y,移动到\overline z,停机 |
4¶
习题5.4
构造机器计算函数 f(x)=2^x.
解:
参考定理5.14,我们可将 f 写为如下形式:
首先我们构造机器 M_3 ,作用是在纸带右面添加 \overline{1}
0 | 1 | 解释 | |
---|---|---|---|
1 | 0R2 | 1R1 | 右移过当前值 |
2 | 1R3 | 添加1 | |
3 | 1L4 | 添加1 | |
4 | 0L5 | 1L4 | 左移过 \overline{1} |
5 | 0R6 | 1L5 | 右移到 \overline{1} |
再构造机器 M_1 如表5.19
0 | 1 | |
---|---|---|
1 | 0R2 | |
2 | 0Rv | 1R3 |
3 | 0R4 | 1R3 |
令 M_2 为 M_1 \Rightarrow \boxed{\text{double}} \Rightarrow \boxed{\text{compress}} \Rightarrow \boxed{\text{shiftl}},从而
若 x=0, 则 M_2 | 1:0\underset{\uparrow}{\overline{x}}0\overline{y}0\cdots \twoheadrightarrow v:000\underset{\uparrow}{\overline{y}}0\cdots
若 x>0, 则 M_2 | 1:0\underset{\uparrow}{\overline{x}}0\overline{y}0\cdots \twoheadrightarrow w:00\underset{\uparrow}{\overline{x-1}}0\overline{g(y)}0\cdots,其中 w 为 M_2 的输出时的状态,g 为 double 函数。
令 \boxed{\text{f}}= M_2[w:=1],M_3\Rightarrow \boxed{\text{f}} 即为所求。
5¶
习题5.5
设机器 M_1 定义如下表:
0 | 1 | |
---|---|---|
1 | 0L3 | 1R2 |
2 | 0L3 | 0R1 |
3 | 0L3 | 1L3 |
对于输入 \bar{x} ,求输出.
注意
在定义5.2中,定义了机器如何停机。注意我们定义的图灵机纸带左端是固定的,若读头左移越过纸带左端,则机器无定义,停机。
解:
若 x=0:
$$ \begin{align} 1: & 0\underset{\uparrow}{1}0000\cdots & (1R2) \notag\\ 2: & 01\underset{\uparrow}{0}000\cdots & (0L3) \notag\\ 3: & 0\underset{\uparrow}{1}0000\cdots & (1L3) \notag\\ 3: & \underset{\uparrow}{0}10000\cdots & (0L3) \notag \end{align} $$ 若 x>0:
6¶
习题5.6
设机器 M_2 定义如下表:
0 | 1 | |
---|---|---|
1 | 0R2 | 0R1 |
2 | 1R3 | 0R1 |
3 | 1R4 | |
4 | 1R5 | |
5 | 1L6 | |
6 | 0R7 | 1L6 |
对于输入 (2,1):01^n01^m01^k00\cdots , 其中 n,m,k\in\mathbb{N}^+ , 求输出.
解:
7¶
习题5.7
构造机器计算函数 f(x)=\left\lfloor \sqrt{x} \right\rfloor .
解:
这里空白的地方太小,写不下。请听习题课讲解。