wahahahehehe

Tips:

1. 博客内容主要为博主的学习笔记,引用已表明出处,如有侵犯请联系我删除;

2. 如有错误请指出,万分感谢;

3. 博主邮箱:yukai_tao@163.com。

计算机的理论模型——图灵机

计算机的理论模型——图灵机

1. 图灵机的由来

图灵机由英国数学家阿兰·麦席森·图灵(Alan Mathison Turing)于1936年提出的一种抽象的计算模型,即一切可计算问题都可以由一个虚拟的机器代替人类进行计算。

image

图灵机的概念在《论数字计算在决断难题中的应用》中提出,原论文题目为《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. 图灵机的构成

image

(1)一条存储带

  • 双向无限长

  • 上面有一个个小方格

  • 每个小方格可以存储一个数字/字母

(2)一个控制器

  • 可以存储当前自身的状态

  • 一个读写头,可以读、写存储带上小方格的数字/字母

  • 可以根据读写头读到数字/字母和程序更改自身的状态

  • 可以沿着存储带一格一格地左移或右移

3. 图灵机的工作步骤

3.1 前期准备工作

  1. 初始化存储带上的符号
  2. 设置控制器当前自身的状态
  3. 放置读写头于起始位置
  4. 准备好工作程序

3.2 工作流程

  1. 读写头读出存储带上当前方格中的数字/字母
  2. 根据自身当前的状态和读到的字符,找到相应的程序语句;
  3. 根据相应的程序语句,做如下三个动作:
    • 在当前存储带的方格上写入一个相应的数字/字母
    • 变更自身状态
    • 读写头向左或向右移动一步,或保持不变

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,需要做如下三个动作:

  1. 将方格的内容改为0
  2. 变更自身状态为q2
  3. 读写头向右移动一格

4.2 用图灵机来计算

图灵机运行前的准备工作:

  1. 存储带上的符号初始化,当前字母表为
  2. 设置控制器当前状态为q1,状态集合为
  3. 读写头置于起始位置
  4. 准备好起始程序

image

图灵机开始工作:

第一步:

  1. 读到的数据为 1,当前的状态为q1
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态保存不变,仍为q1
    • 读写头向右移动一格

image

第二步:

  1. 读到的数据为 1,当前的状态为q1
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态保存不变,仍为q1
    • 读写头向右移动一格

image

第三步:

  1. 读到的数据为 1,当前的状态为q1
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态保存不变,仍为q1
    • 读写头向右移动一格

image

第四步:

  1. 读到的数据为空(b),当前的状态为q1
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态切换为q2
    • 读写头向右移动一格

image

第五步:

  1. 读到的数据为1,当前的状态为q2
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态切换为q2
    • 读写头向右移动一格

image

第六步:

  1. 读到的数据为1,当前的状态为q2
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 1
    • 状态切换为q2
    • 读写头向右移动一格

image

第七步:

  1. 读到的数据为 空(b),当前的状态为q2
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 空(b)
    • 状态切换为q3
    • 读写头向左移动一格

image

第八步:

  1. 读到的数据为 1,当前的状态为q3
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 空(b)
    • 状态切换为q3
    • 读写头保持不动

image

第九步:

  1. 读到的数据为 空(b),当前的状态为q3
  2. 满足的程序如下,执行的动作为:
    • 小方格中写入 空(b)
    • 状态切换为q3
    • 读写头保持不动

image

此时,图灵机成功停机,完成计算。

仔细分析,该步骤就是将左边的3个“1”右边的 2个“1” 相加,得到5个“1”,即完成3 + 2 = 5的计算。

该图灵机在进行任意两个大于0的整数相加。

5. 图灵机的重要性

5.1 图灵机的特点

  • 简单
  • 强大
  • 可实现

image

图灵机样机设计参考

5.2 图灵机的理论意义

  • 给出了一个可实现的通用计算机模型
  • 引入了通过“读写符号”和“状态改变”进行运算的思想
  • 证实了基于简单字母表完成复杂运算的能力
  • 引入了存储区、程序、控制器等概念的原型

posted on 2022-09-07 15:47  Wahahahehehe  阅读(5235)  评论(0编辑  收藏  举报

导航