图灵机 快速入门教程
文章首发于【博客园-陈树义】,点击跳转到原文《图灵机 快速入门教程》。
图灵机是图灵机理论中提出的理想模型,其可以实现任意复杂的计算。
什么是图灵机
英国数学家艾伦·图灵在1936年提出了「图灵机」的理论。「图灵机」设想有一条无限长的纸条,纸条上有一个个方格,每个方格可以存储一个符号,纸条可以向左或向右运动。
图灵机可以做下面三个基本的操作:
- 读取指针头指向的符号。
- 修改方框中的字符。
- 将纸带向左或向右移动,以便修改其临近方框的值。
下面我们通过一个小例子来了解下图灵机到底是如何进行计算的。这个例子比较简单,我们将在空白的纸带条上打印1 1 0
这三个数字。
首先,我们向指针头指向的方框中写入数字1:
接着,我们让纸带向左移动一个方框:
现在,我们再往指针头指向的方框写入数字1:
接着,我们继续让纸带向左移动一个方框,并写入数字0:
这样我们就完成了一个简单的图灵机操作。
用图灵机完成异或操作
我们来尝试一个稍微复杂点的操作,我们尝试将1 1 0
做一个异或操作,即将1 1 0
变成0 0 1
。要图灵机完成计算,就类似于向图灵机输入以下操作指令,这些指令组成了一个小程序。
读到的符号 | 写入指令 | 移动指令 |
---|---|---|
空 | - | - |
0 | 写入1 | 向右移动纸带 |
1 | 写入0 | 向右移动纸带 |
我们假设图灵机纸带现在的状态如下图所示:
现在读取到的符号是0,按照操作指令,我们应该往方框写入1并向右移动一个方框:
现在读取到的符号是1,按照操作指令,我们应该往方框写入0并向右移动一个方框:
类似地,现在读取到的符号是1,我们重复相同的操作。
最后,我们读取到了一个空白字符,图灵机不做任何操作。
用图灵机完成任意复杂计算
上面我们使用了图灵机成功完成了异或操作,理论上来讲我们也可以完成加法、减法、乘法、除法操作,只不过是实现的步骤(指令)复杂些而已。下面这个网站是一个图灵机的在线模拟器,其实现了一些基本运算,比如:加法、减法等,有兴趣的可以自己去试试看。
Online Turing Machine Simulator
图灵机的意义
让我们尝试这样的思考历程:
- 我有许多很复杂的公式需要计算,如果自己一个人算的话时间会很久。
- 思考:能不能有一个东西能帮我实现公式的计算,无论这个公式有多复杂?
- 思考:我能不能设计一个模型来证实这个实行是可行的?(数学家最喜欢建模型来证明了~)
- 思考:提出「图灵机」理论,任何计算都可以简化成固定的步骤,无论多复杂的计算都能实现了。
- 某些动手能力强的数学家利用电子工程学知识将许多真空管组成了一套设备,实现了「图灵机」理论模型。
- 随着电子工程的不断发展,原本庞大的计算机不断变小,慢慢地变成了今天的计算机。
「图灵机」理论通过假设模型证明了任意复杂的计算都能通过一个个简单的操作完成,从而从理论上证明了「无限复杂计算」的可能性,直接给计算机的诞生提供了理论基础。
从这样的思考历程来看,图灵机的出现为计算机的诞生奠定了理论基础,这就是图灵机诞生的意义。
文章首发于【博客园-陈树义】,点击跳转到原文《图灵机 快速入门教程》。
图灵机 快速入门教程相关推荐
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- HealthKit开发快速入门教程大学霸内部教程
HealthKit开发快速入门教程大学霸内部教程 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...
- Apple Watch开发快速入门教程
Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...
- 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程
指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 1.4.2 指示灯组 指示灯组的放大图如图1.5所示. 图1.5 指示灯组 各个指示灯对应的功能如下: q RX:对应于0号端口 ...
- 游戏控制杆OUYA游戏开发快速入门教程
游戏控制杆OUYA游戏开发快速入门教程 1.2.2 游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4 游戏控制杆各个角度的 ...
- Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程
Arduino Yun的主要部件介绍 1.4.1 主要部件 Yun的主要部件如图1.4所示. 图1.4 Arduino Yun的主要部件 在Yun小小的板子上集成了两颗处理器.一个是ATmega3 ...
- 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程
认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...
- OUYA游戏开发快速入门教程1.2OUYA的硬件规格
OUYA游戏开发快速入门教程1.2OUYA的硬件规格 从官网上购买回来的OUYA产品,包含游戏主机.游戏控制杆.说明书.电源线.HDMI线.电源线和电池,如图1-2所示.本节就来简要介绍下,游戏主机和 ...
- Android 2D游戏引擎AndEngine快速入门教程
Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...
最新文章
- 不能ssh连接ubuntu linux 服务器 secureCRT不能ssh连接服务器 不能远程ssh连接虚拟机的ubuntu linux...
- python可以实现哪些功能_Python学习究竟有多强大,Python代码能实现哪些功能
- [开源] .NETCore websocket 即时通讯组件---ImCore
- Python基础教程(一):简介、环境搭建、中文编码
- 你好,脂肪肝!来自22岁的大学生的体检报告
- Linux kernel 3.10内核源码分析--TLB相关--TLB概念、flush、TLB lazy模式
- boost::regex模块部分正则表达式相关的测试程序
- IDEA使用Maven打包时如何去掉测试阶段
- linux网络设置与基础服务命令(ifconfig、hostname、route、netstat、ss、ping、traceroute、nslookup、route)
- Mysql中文乱码问题解决
- CentOS6.2下使用Nokia E72i成功发送短信
- 事件EVENT,WaitForSingleObject(),WaitForMultipleObjecct()和SignalObjectAndWait() 的使用(上)
- 常用浏览器修改User-Agent的方法
- 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 线性回归
- 解决freeswitch ICE 获取RTP地址时间过长的问题
- vSAN其实很简单-vSAN禁得起折腾的吗?
- React 源码剖析系列 - 不可思议的 react diff
- 【数据库系统原理】SQL语言
- 图像超分辨率重建概述
- Deilphi IDE 扩展工具:cnPack DelForEx
热门文章
- 用Unity实现两滴水融合(初次试验)
- indexof java_Java中indexOf的用法
- 什么?有人整理了Kotlin 集合函数锦集!!
- 高中成绩不好高三时可以考计算机吗,高中你遇到过学渣“逆袭”吗?成绩差,高三可以逆袭到什么程度?...
- xScale应用程序性能的优化策略
- vue.js根据数据循环生成表格_vue嵌套列循环生成考勤表数据
- 好奇号火星车近日又发现了什么?
- CVPR 2021 An Empirical Study of Training Self-Supervised Visual Transformers
- 化工企业面临的五大采购管理难题是什么?
- 我可以使用哪些“ clearfix”方法?