题记:看资料时经常看到图灵完备这四个字,但完全不知道什么意思,所以整理了关于图灵完备的资料。
1.图灵
艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。
2.图灵机
图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。
以上只是图灵机模型的内容,而非具体的实现。
图灵机可以解决什么问题
假设上述模型里所说的功能都能被以某种形式物理实现,那么任意可计算问题都可以被解决。
计算问题的一些举例:
- 给定一个正整数n,判断它是否是质数
- 给定一个01序列,把他们按位取反
- 给定一个字符串,判断某个字符是否存在,及查找存在位置
- 给定一个逻辑蕴含的命题,求它的逆否命题
非计算问题的例子:
- 今晚吃什么
- 为什么太阳从东边升起
3.什么是图灵完备?
在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)按照一定的顺序可以计算出结果,被称为图灵完备(turing complete)。
一个有图灵完备指令集的设备被定义为通用计算机。如果是图灵完备的,它(计算机设备)有能力执行条件跳转(if、while、goto语句)以及改变内存数据。 如果某个东西展现出了图灵完备,它就有能力表现出可以模拟原始计算机,而即使最简单的计算机也能模拟出最复杂的计算机。所有的通用编程语言和现代计算机的指令集都是图灵完备的(C++ template就是图灵完备的),都能解决内存有限的问题。图灵完备的机器都被定义有无限内存,但是机器指令集却通常定义为只工作在特定的、有限数量的RAM上。
图灵完备的语言,有循环执行语句,判断分支语句等。理论上能解决任何算法。但有可能进入死循环而程序崩溃。
图灵不完备也不是没有意义,有些场景我们需要限制语言本身。如限制循环和递归, 可以保证该语言能写的程序一定是终止的。
比特币的脚本系统是图灵不完备的,以太坊的智能合约系统是图灵完备的。各有优缺点,图灵不完备会更安全些,图灵完备会更智能些。