计算机的理论模型——图灵机
计算机的理论模型——图灵机
1. 图灵机的由来
图灵机由英国数学家阿兰·麦席森·图灵(Alan Mathison Turing)于1936年提出的一种抽象的计算模型,即一切可计算问题都可以由一个虚拟的机器代替人类进行计算。
图灵机的概念在《论数字计算在决断难题中的应用》中提出,原论文题目为《On Computable Numbers, with an Application to the Entscheidungsproblem》,链接https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf
可计算问题
- 定义:设函数f的定义域是D,值域是R,如果存在一种算法,对D中任意给定的x,都能计算出f(x)的值,则称函数f是可计算的
- 研究思路:为计算建立一个数学模型,然后证明,凡是这个计算模型能够完成的任务,就是可计算的任务
2. 图灵机的构成
(1)一条存储带
-
双向无限长
-
上面有一个个小方格
-
每个小方格可以存储一个数字/字母
(2)一个控制器
-
可以存储当前自身的状态
-
一个读写头,可以读、写存储带上小方格的数字/字母
-
可以根据读写头读到数字/字母和程序更改自身的状态
-
可以沿着存储带一格一格地左移或右移
3. 图灵机的工作步骤
3.1 前期准备工作
- 初始化存储带上的符号
- 设置控制器当前自身的状态
- 放置读写头于起始位置
- 准备好工作程序
3.2 工作流程
- 读写头读出存储带上当前方格中的数字/字母
- 根据自身当前的状态和读到的字符,找到相应的程序语句;
- 根据相应的程序语句,做如下三个动作:
- 在当前存储带的方格上写入一个相应的数字/字母
- 变更自身状态
- 读写头向左或向右移动一步,或保持不变
4. 头脑风暴 - 模拟图灵机工作
4.1 图灵机的程序构成
图灵机的程序可以由五个元素为一组的序列定义:
<q, b, a, m, q'>
- q:当前状态
- q':下一个状态
- b:当前方格中的符号
- a:当前方格中修改后的符号
- m:读写头移动的方向,左移L(Left),右移R(Right),保持不动H(Hold)
举例说明:<q1, 1, 0, R, q2>,当前状态为q1,读写头所在的方格内容为1,需要做如下三个动作:
- 将方格的内容改为0
- 变更自身状态为q2
- 读写头向右移动一格
4.2 用图灵机来计算
图灵机运行前的准备工作:
- 存储带上的符号初始化,当前字母表为
- 设置控制器当前状态为q1,状态集合为
- 读写头置于起始位置
- 准备好起始程序
图灵机开始工作:
第一步:
- 读到的数据为 1,当前的状态为q1
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态保存不变,仍为q1
- 读写头向右移动一格
第二步:
- 读到的数据为 1,当前的状态为q1
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态保存不变,仍为q1
- 读写头向右移动一格
第三步:
- 读到的数据为 1,当前的状态为q1
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态保存不变,仍为q1
- 读写头向右移动一格
第四步:
- 读到的数据为空(b),当前的状态为q1
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态切换为q2
- 读写头向右移动一格
第五步:
- 读到的数据为1,当前的状态为q2
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态切换为q2
- 读写头向右移动一格
第六步:
- 读到的数据为1,当前的状态为q2
- 满足的程序如下,执行的动作为:
- 小方格中写入 1
- 状态切换为q2
- 读写头向右移动一格
第七步:
- 读到的数据为 空(b),当前的状态为q2
- 满足的程序如下,执行的动作为:
- 小方格中写入 空(b)
- 状态切换为q3
- 读写头向左移动一格
第八步:
- 读到的数据为 1,当前的状态为q3
- 满足的程序如下,执行的动作为:
- 小方格中写入 空(b)
- 状态切换为q3
- 读写头保持不动
第九步:
- 读到的数据为 空(b),当前的状态为q3
- 满足的程序如下,执行的动作为:
- 小方格中写入 空(b)
- 状态切换为q3
- 读写头保持不动
此时,图灵机成功停机,完成计算。
仔细分析,该步骤就是将左边的3个“1” 和右边的 2个“1” 相加,得到5个“1”,即完成3 + 2 = 5
的计算。
该图灵机在进行任意两个大于0的整数相加。
5. 图灵机的重要性
5.1 图灵机的特点
- 简单
- 强大
- 可实现
5.2 图灵机的理论意义
- 给出了一个可实现的通用计算机模型
- 引入了通过“读写符号”和“状态改变”进行运算的思想
- 证实了基于简单字母表完成复杂运算的能力
- 引入了存储区、程序、控制器等概念的原型
posted on 2022-09-07 15:47 Wahahahehehe 阅读(6050) 评论(0) 编辑 收藏 举报