图灵机原理

图灵机原理

组成

一个两头无延伸的纸带,一个读写头,一本操作手册。

格式

纸带上只能写 0 和 1。

读写头可以在纸带上左右移动。

手册的每一页都有“一个判断”和“三个操作”:

  • 一个判断:判断读写头当前位置的值是 0 还是 1,根据不同的值,选择不同的操作(每页都有两组动作,分别对应 0 和 1 的情况,每组动作都执行三个操作)。

  • 三个操作:1、如何修改当前位置的值(0 或 1),2、如何移动读写头(左、右、原地不动),3、翻到指定的手册页

启动

在开始执行前,需要做一些初始化操作:

  1. 把程序代码(0 和 1 的序列)写到纸带上,纸带上要有初始信息给读写头读取。

  2. 将读写头定位到初始位置(程序要求的初始位置),

  3. 指定操作手册(一个二维数组)

  4. 指定手册的初始页面(程序要求的初始页面)。

  5. 指定一个或多个手册页作为“停机”页面,当到达该页面时,则停止运行。

运行

  1. 翻到手册的初始页面,

  2. 如果当前页面是“停机”页面,则停止运行。

  3. 如果不是“停机”页面,则判断当前位置的值是 0 还是 1,并选择相应的动作。

  4. 根据动作要求,修改当前位置的值。

  5. 根据动作要求,移动读写头。

  6. 根据动作要求,翻到指定的手册页面。

  7. 回到第 2 步重复执行。

JavaScript 示例

// 图灵机// program  : 纸带(存储程序和执行结果)
// position : 初始位置
// manual   : 操作手册(二维数组)
// page     : 初始页面
// stop     : 停机页面(数组,可指定多个停机页面)
function run(program, position, manual, page, stop) {// 通过查询手册得到的“新值”和“移动方向”let value, direction;// 循环直到页码为停机页面while (! stop.includes(page)) {// 读取当前位置的值value = program[position];// 查询手册,获取新值、移动方向、新页面[value, direction, page] = manual[page][value];// 赋值program[position] = value;// 移动position += direction;};
}// 操作手册(该手册实现加法运算)
const plus_manual = {// 旧页面: {旧值: [新值, 移动方向, 新页面]}0: {0: [1,  1, 1], 1: [1,  1, 0]},1: {0: [0, -1, 2], 1: [1,  1, 1]},2: {0: [0,  0, 3], 1: [0,  0, 3]},
};// 手册其实就是一个二维数组
//const plus_manual = [
//  // [新值, 移动方向, 新页面]
//  [[1,  1, 1], [1,  1, 0]],
//  [[0, -1, 2], [1,  1, 1]],
//  [[0,  0, 3], [0,  0, 3]],
//];// 程序(计算4+3)
let program = [1,1,1,1,0,1,1,1,0];// 启动
run(program, 0, plus_manual, 0, [3]);// 显示结果
console.log(program);// 结果 = 7
// [1, 1, 1, 1, 1, 1, 1, 0, 0]// 这个图灵机是以 bit 为移动单位,每个格子只能存储 0 和 1,而实际的计算机是以 Byte(8 bit)为移动单位,每个格子可以存储 0-255 的值。

视频演示:https://www.bilibili.com/video/BV1br4y1N762/
视频演示:https://www.bilibili.com/video/BV1VS4y1a7JD/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实习面试经历(微软/360/蔚来/百度/小米/元戎启行/腾讯)

从去年十一月到现在陆陆续续面试了好几家公司实习,做个简单的记录供大家参考吧,个人背景是某211大三的科班,之前没有实习经历 按照时间线: 11.8 微软Azure工程实习生 这是我第一次面试实习,个人觉得答的很不好。之前…

淘宝/天猫商品详情实时数据API技术实现

随着电子商务的蓬勃发展,对于电商平台的商家而言,实时获取商品数据变得至关重要。通过API接口,可以轻松地从电商平台获取这些数据。本文将详细介绍如何使用淘宝/天猫提供的API接口实现商品详情数据的实时获取,并给出具体的代码示例…

podman configure insecure certificate registry【podman 设置非安全镜像仓库】

预备条件 docker registry仓库私搭并配置证书centos 7.9 部署 harbor 镜像仓库实践harbor 部署入门指南Podman 部署私有镜像仓库 设置 $ vim /etc/hosts 192.168.23.47 registry.ghostwritten.com$ vim /etc/containers/registries.conf ... [[registry]] location "r…

【css技巧】css设置文字不能被选中

ChatGPT4.0国内站点:海鲸AI 在CSS中,如果你想让文本内容不能被用户选中,可以使用user-select属性。这个属性可以控制用户是否能够选择文本。以下是如何使用这个属性的例子: .unselectable {-webkit-user-select: none; /* Safar…

7.2 1D PARALLEL CONVOLUTION—A BASIC ALGORITHM

正如我们在第7.1节中提到的,所有输出(P)元素的计算可以在卷积中并行完成。这使得卷积成为并行计算的理想问题。根据我们在矩阵-矩阵乘法方面的经验,我们可以快速编写一个简单的并行卷积内核。为了简单起见,我们将从1D卷…

【MySQL】数据库概述与SQL语句

一、数据库基本概念 数据库:DateBase,简称:DB 数据库特点: 持久化存储数据 -> 文件系统方便存储和管理数据使用了统一方式管理数据库 -> SQL 常见的数据库软件: OracleMySQLMicrosoft SQL ServerDB2SQLite …

【liunx】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

线程池单例模式STL,智能指针和线程安全其他常见的各种锁读者写者问题 1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题 喜欢的点赞,收藏,关注一下把! 1.线程池 目前我们学了挂起等待锁、条件变量、信…

【排序算法】一、排序概念和直接插入排序(C/C++)

「前言」文章内容是排序算法之直接插入排序的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、排序概念的介绍二、直接插入排序2.1 原理2.2 代码实现(C/C&#xf…

Web API乐观锁和悲观锁

在 Web API 中,乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)是两种常见的并发控制机制。它们的目的都是在多个用户同时访问和修改相同资源时,确保数据的一致性和完整性。 乐观锁 乐观锁的思…

Linux的网络设置

一.查看网络配置 1.查看网络接口信息 - ifconfig ① 直接使用 ifconfig 命令 默认显示活动的网卡 解析: ② ifconfig 具体网卡名称 只显示具体的网卡的信息 ③ ifconfig -a 显示所有的网卡 ④ ifconfig 网卡名称 down 关闭网卡 ifdown 关闭网卡 …

2024年01月微软更新Bug 已解决 !Explorer.EXE 提示:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。

前倾概要 近期大量出现如上图问题,杀毒,系统急救箱都没反应,罪魁祸首就是微软更新! 点击什么都是:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 但软件使用正常,还能通过建立…

MATLAB中slist函数用法

目录 语法 说明 示例 显示模型的已排序列表 slist函数的功能是在模拟调试会话期间显示已排序的模块列表。 语法 slist 说明 slist在MATLAB命令窗口中显示根系统以及根系统中的每个非虚拟子系统或引用模型的块的已排序列表。对于根系统、每个非虚拟子系统和每个引用模型&…

linux离线安装git

首先需要有一台有网的linux,下载git源码包 下载地址 Index of /pub/software/scm/git/ 我这里下载的是git-2.9.5.tar.gz,依次执行如下命令进行编译 # 在有网的环境中,编译git,然后打包拿到内网直接用 # 下载git-2.9.5.tar.gz&…

SQL Server 加密 view文本

CREATE VIEW dbo.View_building WITH ENCRYPTION AS SELECT * FROM Building_Temp; GO 注意: 加密後就看不到VIEW文本了,修改 ALTER VIEW dbo.View_building WITH ENCRYPTION AS –修改後的VIEW 文本 GO 或者刪除再新增。 所以,要另備份原V…

【产品应用】一体化伺服电机在管道检测机器人中的应用

一体化伺服电机在管道检测机器人的应用正日益受到关注。管道检测机器人是一种能够在管道内部进行检测和维护的智能化设备,它可以检测管道的内部结构、泄漏、腐蚀等问题,以确保管道的安全和稳定运行。而一体化伺服电机作为机器人的动力源,对于…

20230403读书笔记|《苏轼词集》——试问岭南应不好,此心安处是吾乡

20230403读书笔记|《苏轼词集》——试问岭南应不好,此心安处是吾乡 导读卷一卷二卷三 在书架里加了好几本苏轼词集,很多词是重复的,但这并不影响多读几本,苏轼的词豪迈大气,豁达爽朗,蛮值得一读的。有不少都…

中小型家具制造业使用制造管理MES系统应该注意什么?

随着人们生活水平变高,人们对家具的要求也在提高。为了应对越来越高的要求,企业开始寻找更有效的方法,其中就包括mes系统,那么中小型家具企业在使用mes的过程中应该注意什么呢? 第一,要考虑选择什么样的mes…

Pycharm直接从github上下载项目(社区版)

Pycharm直接从github上下载项目(社区版) 1.在pycharm上关联github账号2.导航栏——Git——clone 1.在pycharm上关联github账号 2.导航栏——Git——clone

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种,在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义:二叉树的创建:二叉树的遍历:前序遍历:中序遍历:后序遍历:层序遍历&#…

梯度提升决策树(Gradient Boosting Decision Trees,GBDT)

梯度提升决策树(Gradient Boosting Decision Trees,GBDT) ​ 提升树是以分类树或回归树为基本分类器的提升方法。 提升树被认为是统计学习 中性能最好的方法之一。 ​ 提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。 以决策…