原标题:带你深入理解图灵机--什么是图灵机、图灵完备

我们知道图灵机首次提出在图灵的一篇论文《论数字计算在决断难题中的应用》中提出,原论文题目为《On Computable Numbers, with an Application to the Entscheidungsproblem》,英文好的同学可以从https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf这个链接中查看原版的论文内容。

一、图灵机的组成

网上有一张经典的图片来表达图灵机的构成,图如下:

图灵机的组成.png

这张图片什么意思?这么一个简单的机器/装置怎么会所有电子计算机的理论模型?

相信大家看到这张图后都有这样的疑问,下面笔者带来由浅入深去理解图灵机的组成。

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,它运算过程看作下列两种简单的动作:

在纸上写上或擦除某个符号;

一个无限长的存储带,带子有一个个连续的存储格子组成,每个格子可以存储一个数字或符号

一个读写头,读写头可以在存储带上左右移动,并可以读、修改存储格上的数字或符号

停机状态

控制程序指令,指令可以根据当前状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作(左移还是右移),并改变状态存储器的值,令机器进入一个新的状态或保持状态不变。

当然这些只是理想的图灵机,因为现实中不存在无限长的存储带,更加图灵的理论这样的一台装置就能模拟人类所能进行的任何计算过程。是不是很神奇?我相信你肯定不相信,不过图灵是经过严格的数学证明,下面我们来看看图灵机的计算过程。

二、图灵机的运行机制

准备- 存储带子上的格子初始话

- 设置内部状态存储器当前状态

- 读写头设置初始在存储带上所做的格子位置

- 准备好控制指令,即控制程序。

反复执行以下步骤,直到停机- 读写头读出当前格子的数字或符号

- 根据当前状态和读到的字母或符号找到对应的控制指令

- 根据控制指令,执行以下三个动作

1. 读写头在格子上擦除或写入一个数字或符号

2. 变更状态到一个新状态

3. 读写头向左或向右移动一格

估计你还是不明白,别急。看过《三体》的同学都知道三体人把地球人看做“虫子”,三体人的维度比地球三维世界高,就好像我们人类把看虫子一样。

下面,我们把虫子放到一个二维的世界中,以虫子为例,给大家来说明最简单的图灵机模型(注:该例子非原创)。

假设理想的情况一:

虫子所处的二维世界是一个无限长的纸带,这个纸带上被分成了若干小的方格,而每个方格都仅仅只有黑和白两种颜色。纸带的片段为: 虫子所在二维纸带.png

假设虫子的感官只有眼睛,并且它的视力短的可怜,只能看到当前所处格子的颜色

虫子的操作系统、程序为:我们假设黑色是食物区,虫子吃到食物后前移一格,白色是空白区,没有食物后退一格,

输入

输出

黑色

白色

后移一格

在这个情况中格子的颜色是虫子的输入信息,集合为IN={黑色,白色},输出集合为 OUT= {前移一格,后移一格}

开始是黑色,虫子前移一格,到达第2格

第2还是黑色,虫子前移一格,到达第3格

第3格还是黑色,虫子前移一格,到达第4格

第4格为白色,虫子后移一格,回到第3格

可见,这条带子上,虫子在第4格和第3格来回移动循环不止。

现实中虫子肯定不可能傻到无线循环,虫子会有饥饿、吃饱的感受,食物吃了后也会消失。因此我们在情况下中改进下模型。

虫子在黑色的格子时,如果是饥饿状态,吃掉食物把格子变成白色;如果是吃饱状态,后移一格

虫子在白色的格子时,如果是饥饿状态,停下来等食物长出来涂黑;如果是吃饱状态,前移一格

输入

当前状态

输出

黑色

吃饱

后移一格

饥饿

黑色

饥饿

吃饱

白色

吃饱

饥饿

白色

饥饿

等待食物长出来涂黑(不移动)

吃饱

在这种情况中,输入集合为IN={黑色,白色},输出集合为 OUT= {前移一格,后移一格,吃掉食物涂白,等待食物长出来涂黑},内部状态S={吃饱,饥饿}

二维纸带不变,从开始位置开始,虫子初始是饥饿状态

第1格是黑色,虫子饥饿,吃掉食物格子变白,虫子新状态为吃饱

第1格为白色,虫子吃饱,虫子前移一格,到达第2格,虫子新状态为饥饿

第2格为黑色,虫子饥饿,吃掉食物格子变白,虫子新状态为吃饱

第2格为白色,虫子吃饱,虫子前移一格,到达第3格,虫子新状态为饥饿

第3格为黑色,虫子饥饿,吃掉食物格子变白,虫子新状态为吃饱

第3格为白色,虫子吃饱,虫子前移一格,到达第4格,虫子新状态为饥饿

第4格为白色,虫子饥饿,等待食物长出来涂黑,虫子新状态为吃饱

第4格为黑色,虫子吃饱,虫子后退一格,到达第3格,虫子新状态为饥饿

这时,第3格已经长出来食物,是黑色,因此流程和第5步的情况一样了

情况二,小虫的行为比情况以复杂了一些,但小虫最后仍然会落入无限循环当中。

到此,如果你已经彻底搞懂了二维虫子是怎么移动的,那么你已经明白了图灵机的工作原理了!因为从本质上讲,最后的小虫模型就是一个图灵机!

三、如何理解图灵机

刚才用二维虫子说明了图灵机的工作原理,相信你的第一个反映就是,这样的模型太简单了!

他根本说明不了现实世界中的任何问题!下面,我就要试图说服你,图灵机这个模型是伟大的!

其实虫子的所有决策和行为都可以抽象成一个图灵机模型。

为什么可以做这种抽象呢?

其实可以把二维虫子的模型进行更多扩展,以和现实世界基本或完全一致。因为二维虫子模型是以一切都简化的前提开始的,所以它的确是太太简单了。

然而,我们可以把二维虫子的输入集合、输出行动集合、内部状态集合进行扩大,这个模型就一下子实用多了。

二维虫子完全可以处于一个三维的空间中而不是简简单单的纸带。

二维虫子的视力很好,它一下子能读到方圆500米的信息。

二维虫子也可以拥有其他的感觉器官,比如嗅觉、听觉等等,而这些改变都仅仅是扩大了输入集合的维数和范围,并没有其他更本质的改变。

二维虫子可能的输出集合也是异常的丰富,它不仅仅能移动自己,还可以尽情的改造它所在的自然界。

进一步的,二维虫子的内部状态可能非常的多,而且控制它行为的程序可能异常复杂

那么二维虫子会有什么本事呢?这就很难说了,因为随着小虫内部的状态数的增加,随着它所处环境的复杂度的增加,我们正在逐渐失去对二维虫子行为的预测能力。

"输入集合、输出集合、内部状态、固定的程序指令!"

就是这四样东西抓住了二维虫子信息处理的根本。

四、 什么是图灵完备

维基百科解释:

可图灵指在可计算性理论中,编程语言或任意其他的逻辑系统如具有等用于通用图灵机的计算能力。换言之,此系统可与通用图灵机互相模拟。

上面的解释比较抽象,通过上面的例子理解了什么是图灵机,图灵完备其实就很很简单理解了。

简单来说,能够抽象成图灵机的系统或编程语言就是图灵完备的;一切可计算的问题图灵机都能计算,因此满足这样要求的逻辑系统、装置或者编程语言就叫图灵完备的。

因此可见,二维虫子是图灵完备的。

Bitcoin的脚本由于没有条件分支,循环等控制指令,回到上面的虫子的例子,虫子就不能根据当前状态,判断选择移动还是吃食物等一系列的动作,因此不满足图灵机的模型,不是图灵完备的。

大脑操作系统.png

我们人能不能也被这样的抽象呢?显然是可以的。

其实我们每一个会决策、会思考的人就可以被抽象的看成一个图灵机,也就是笑来老师一直说:每个人都有自己的操作系统,因为有元认知能力,还可以自己升级操作系统。

输入状态集合就是你所处的环境中能够看到、听到、闻到、感觉到的所有一起,可能的输出集合就是你的每一言每一行,以及你能够表达出来的所有表情动作。内部状态集合则要复杂得多。因为我们可以把任意一个神经细胞的状态组合看作是一个内部状态,那么所有可能的神经细胞的状态组合将是天文数字!这就是人类的记忆。只要图灵机具有了内部状态,它就相应的具有了记忆。

这样理解的话,还有两个问题:

图灵机的程序指令是固定的。但是人类有学习能力,也就是说人的大脑会进化,操作系统会升级,所以大脑的实际程序规则是不固定,似乎图灵机模型包含不了。

人类的很多现象似乎都能被图灵机包括:情绪、情感等

作者:jerry区块链技术与思维

链接:https://www.jianshu.com/p/c07d83c4f3a1返回搜狐,查看更多

责任编辑:

简述什么是图灵机_带你深入理解图灵机--什么是图灵机、图灵完备相关推荐

  1. 红黑树在java中的作用_带你真正理解Java数据结构中的红黑树

    红黑树是平衡的二叉树,它不是一个完美的平衡二叉树,但是在动态插入过程中平衡二叉搜索树的代价相对较高,所以红黑树就此出现,下面就让爱站技术频道小编带你一起进入下文了解一下吧! 一.红黑树所处数据结构的位 ...

  2. python class用法理解_带你全面理解python中self的用法

    self代表类的实例,而非类. 执行结果如下 从上面的例子中可以很明显的看出,self代表的是类的实例.而self.class则指向类. self不必非写成self 把上面的代码改写一下. 改成thi ...

  3. pytest测试框架_带你深入理解自动化测试框架Pytest的配置文件!

    都有哪些种类的配置文件 pytest.ini:pytest的主配置文件,可以改变pytest的默认行为 conftest.py:是本地插件库,其中的hook函数和fixture将作用于该文件所在的目录 ...

  4. 感悟人生的伤感日志_带着眼泪去流浪

    感悟人生的伤感日志_带着眼泪去流浪 - 感悟人生的伤感日志_带着眼泪去流浪 眼泪里不但包含了许多悲哀和伤痕,还包括了埋怨.嫉妒和轻视.展示伤痕,是痛苦的-- 人生里有许多悲哀.人生里有许多伤痕. 这些 ...

  5. 最新酒桌小游戏喝酒小程序源码_带流量主源码下载

    2022最新酒桌小游戏喝酒小程序源码_带流量主 喝酒神器3.6,我修改增加了广告位,根据文档直接替换即可,原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码,然后关闭广告展示提交,通过后打 ...

  6. 2022最新酒桌小游戏喝酒小程序源码_带流量主

    2022最新酒桌小游戏喝酒小程序源码_带流量主 喝酒神器3.6,我修改增加了广告位,根据文档直接替换即可,原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码,然后关闭广告展示提交,通过后打 ...

  7. 2023新版 多功能去水印工具微信小程序源码_带流量主功能(已更新)

    简介: 2023新版 多功能去水印工具微信小程序源码_带流量主功能 自带去水印接口的多功能小程序 支持各大平台短视频去水印 支持保存封面,图集,标题等等 支持本地图片去水印 支持图片拼接 支持九宫格切 ...

  8. 笑话与趣图微信小程序源码_带广告流量主

    笑话与趣图微信小程序源码_带流量主-PHP文档类资源-CSDN下载这是一款以笑话和趣味图为主的一款微信小程序源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn ...

  9. 带你深入理解图灵机--什么是人工智能AI?

    前两篇文章,讲了图灵所在的时代,图灵根据大数学家希尔伯特提出的数学问题设计出图灵机模型,笔者也通过较长的篇幅介绍了图灵机的组成,运行步骤等,具体的文章内容请看前面(昨天.前天本微信公众号文章)两个链接 ...

最新文章

  1. 网络推广专员浅析网站优化导航栏该怎样设置?
  2. UIWebView UITextView
  3. linux c之main(int argc, char *argv[], char *envp[])参数意义
  4. leetcode69. x 的平方根(二分法)
  5. linux火狐浏览器49.0安装教程,火狐浏览器Linux最新版下载
  6. HDOJ1496 Equations【Hash】
  7. 素材干货|UI设计师不会插画?不难搞!有了这些模板,作品安了!
  8. Java在WEB项目中获取文件路径
  9. python2 与 python3的区别
  10. Android View框架总结(七)View事件分发机制
  11. websocket 应用实例
  12. 乐高创意机器人moc_深度乐高 篇一:大神带你玩转乐高 Speed 系列套内 MOC
  13. linux 博通wifi驱动,博通WiFi驱动
  14. 提升学习 Prompt 总结
  15. 4:3 背景图片素材
  16. Kali 下对安卓手机的攻击
  17. 【php】分享一个php转换微信、QQ、微博 特殊非主流 | 杀马特 网名的 function
  18. Windows7旗舰版性能优化
  19. 学习单片机的准备工作
  20. PW5410A原厂低噪声DC-DC升压开关电容倍压器

热门文章

  1. java相同字符组合归类_对相同字母组合的单词进行归类
  2. 混合驱动的神经网络动态逆无人机机动飞行控制
  3. linux进程暂停与恢复
  4. vue重复点击路由报错,解决NavigationDuplicated: Avoided redundant navigation to current location: 问题
  5. 我在ESB上走的弯路
  6. c++中的ignore和tie
  7. ubuntu 环境搭建问题归纳
  8. 从0糖到0防腐剂,元气森林缘何偏向“虎山行”?
  9. 尼尔森F形状网页浏览模式
  10. App应用双开技术,Android沙盒