计算理论导引实验三:构造图灵机

news2024/11/25 19:51:38

计算理论导引实验三:构造图灵机

  • 实验描述
    • 形式化定义
    • 图灵机M的状态图
  • 算法设计与描述
    • 状态转移关系类
    • 键盘输入及逻辑处理类
  • 编码实现
    • 测试运行

实验描述

要求构造一个能够识别语言L的图灵机。语言L的描述和实验内容如下图所示

请添加图片描述

形式化定义

根据实验描述,可以将图灵机进行如下设计,得到图灵机的七元祖形式化定义。

  1. 状态集为{start,q0,q1,q2,q3,q4,q5,q6,q7,q9,accept,reject}
  2. 输入字母表为{#,+,=,1},这里使用1来表示代替题中点的特定字符
  3. 带子字母表为{#,+,=,1,X,},这里使用‘’在代码中表示特殊空白符号
  4. 起始状态为start
  5. 接受状态集为{accept}
  6. 拒绝状态集为{reject}
  7. 转移函数用状态图来描述,如下图所示,为简化状态图,没有在图中显示拒绝状态,也没有显示到拒绝状态的转移,表明一个状态对某个字符没有向外的转移即拒绝。图中的|_|用来表示特殊空白符号

图灵机M的状态图

请添加图片描述

算法设计与描述

将整个过程抽象成两个类,分别为状态转移类,键盘输入及逻辑处理类。

状态转移关系类

该类主要用于表示转移函数中的各项,在设计中,该类的结构如下:

  1. 成员变量:当前状态,读写头指的字符,转移的新状态,是否修改纸带,要替换的字符和图灵机读写头移动的方向。
  2. 成员方法:获取和设置当前状态、读写头指的字符、转移的新状态、是否修改纸带、要替换的字符和图灵机读写头移动的方向的方法。重写tostring方法,用来得到当前对象的字符串表示。
  3. 构造方法:无参构造方法和带参数的构造方法。

键盘输入及逻辑处理类

该类是用来进行一系列的初始化、以及根据状态转移函数得到图灵机读写头移动方向及状态转移是否修改纸带等操作的类,主要包括以下几项:

  1. 初始化待识别字符串
    通过键盘输入字符串,并对输入的字符串进行前后加空白符号特殊处理后,将字符串保存到字符数组中。这里使用“_”来代替特殊的空白符号
  2. 初始化状态转移关系集合
    将图灵机的每个状态转移关系保存到集合中。每一个状态转移函数关系都是状态转移关系类的一个实例化对象,包含了读写头指的字符,转移的新状态,是否修改纸带,要替换的字符和图灵机读写头移动的方向。
  3. 图灵机状态转移处理
    对于输入的字符串中每一个真实输入的字符进行循环操作:
    a) 遍历状态转移集合,判断当前状态下,读入当前字符,根据状态转移函数中对应的操作,进行替换字符、状态转移、图灵机读写头左右移动,如果找到了符合条件的就进行b)中操作,之后进行d)操作。否则直接执行c)中操作。
    b) 此时表明存在转移,如果状态转移函数中的是否改变纸带来对纸带进行对应操作,若需要改变,则修改读写头所在位置纸带的值,根据图灵机读写头R还是L进行相应的右移和左移,同时转移到新的状态。
    c) 此时表明当前状态下,图灵机读写头对于当前字符没有任何转移操作,也就是此时便不满足该图灵机的构造,不能被识别,得出该字符串被设计的图灵机拒绝。程序结束。
    d) 在之前的步骤进行完之后,如果当前图灵机的读写头到了特殊空白符号,并且当前的状态也到了accept接受状态时,该输入字符串被设计的图灵机所接受。否则便是c)中的情况。

编码实现

此处省略代码部分。

测试运行

以输入为#1+1=1时为例,被本次设计的图灵机拒绝。
在这里插入图片描述

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

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

相关文章

【批量修改后缀名】如何批量去修改文件后缀名(亲测图文结合)

【写在前面】前段时间,因为素材需要,就去之前我制作相册的一个网站上下载了一批照片,但是照片下载下来的格式居然是.png!600*0,这种格式的也打不开,于是乎我自己就吭哧吭哧的去一个个的修改,然后我一想他娘…

EBU5476 Microprocessor System Design 知识点总结_5 GPIO

GPIO General Purpose Input Output, Memory-Mapped IO 把设备,控制等寄存器映射到内存里。好处就是访问设备方式和内存一样,也不用设计复杂的IO电路,便捷;缺点在于占用了内存空间。 Peripheral-Mapped IO IO有一块专门的存储…

Vue|单文件组件与脚手架安装

一、单文件组件1.1 介绍1.2 文件组成1.3 加深认知 二、脚手架安装2.1 什么是脚手架?2.2 使用镜像2.3 全局安装vue/cli2.4 创建并启动项目 一、单文件组件 1.1 介绍 [.vue]文件,称为单文件组件,是Vue.js自定义的一种文件格式,一个.vue文件就…

AST使用(二)

//在此之前,先了解下path和node/*path指的是路径 其常用的方法当前路径所对应的源代码 : path.toString判断path是什么type,使用path.isXXX 这个方法 : if(path.isStringLiteral()){}获取path的上一级路径 : let parent path.parentPath;获取path的子…

nginx的安装及代理和负载均衡设置

一、通过yum方式进行安装 官网参考地址:https://nginx.org/en/linux_packages.html#RHEL 1.1 安装好依赖 执行下面的命令安装 sudo yum install yum-utils1.2、 先配置好yum源 新建文件/etc/yum.repos.d/nginx.repo,文件内容: [nginx-s…

一个成熟的软件测试工程师应该具备那些“技能”

1、良好的沟通 相信大家都在网上看到过各种吐槽程序员不解风情的段子,开怀大笑之余深思,作为一个测试工程师又何尝不是如此?通常沟通技能成为横亘在测试工程师与其他合作部门之间的万丈鸿沟,也成为测试工程师成长的最大瓶颈。下面…

Vector-常用CAN工具 - 以太网报文收发方向

目录 Rx 和 Tx 标记 Example:从 CANoe 向 ECU 发送以太网数据包 用例 2:从 ECU 接收以太网数据包 如何仅显示物理或虚拟通信 如何仅显示 Rx 或 Tx 以太网数据包 VN5000以太网包过滤 1、什么是硬件过滤? 2、什么时候使用硬件过滤&…

useEffect,useLayoutEffect的基础知识和底层机制

useEffect 是 React 中一个重要的 Hook,用来处理组件的副作用操作。它的基础知识包括两个方面:执行时机和参数。 执行时机: useEff ect 的执行时机包括两种情况: 组件挂载时,即第一次渲染之后。组件更新时&#xff…

智能垃圾分类小程序,流量主变现,外卖cps权益变现,uniCloud云开发无需购买服务器和域名,助力每一位创业者。

技术优势 基于 uniapp uniCloud 研发,无需购买服务器和域名,uniCloud 是 DCloud 联合阿里云、腾讯云 serverless 构建。从此不用关心服务器运维、弹性扩容、大并发承载、防DDoS攻击等,轻松应对高并发应用, 传统小程序开通流量主…

Qt 多语言实现

简介 Qt Linguist 提供了一套加速应用程序翻译和国际化的工具。Qt 使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统。 使用 QTranslator 来加载生成的 qm 文件,就可以让程序显示指定的语言。 // 国际化翻译 QString language "CH…

项目Es、kafka、mysql容量评估方案和服务器资源预估方案

目录 1、Es 评估计划 一个接口jmeter压测qps 1万, logstash 读取日志文件写入es Logstash配置 Es容量变化前后差值/1万 * 1.67 * (1副本数) ~ 次接口es 容量 (日志数据30kb) 影响es存储的主要原因 通过 kibana 查看 堆栈》索…

管理类联考——英语——技巧篇——阅读理解

一、阅读理解A节选项的点 1.正确答案的五大特征 (1)“主题为王”原则:即正确答案通常与文章的中心思想、主旨大意有关。 (2)正确答案的特点:语言简化、反话正说、正话反说、关键词替换。 (3)正确答案要选相对的,不选绝对的。正确答案通常含有…

编译原理期末速成-LL(1)文法、FIRST集、FOLLOW集

文章目录 LL(1)文法的条件LL(1)分析法构造FIRST(α)构造FOLLOW(A)习题强化 LL(1)文法的条件 文法不含左递归 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即若 对于文法中的每个非终结符A,若它存在某个候选首符集包含ε,则 这里&am…

面试被问到:测试计划和测试方案有什么区别?

面试的时候,很多小伙伴都被面试官问过这个问题 “测试计划和测试方案有什么区别”? 到底有什么区别呢?我们先好好了解下这两个文档。 一、测试计划 1、测试计划是什么? 测试计划是组织管理层面的文件,从组织管理的…

Jetpack Compose 中使用 CameraX 拍照和录制视频

在 Android 开发的历史中,Camera 的 API 是一直受人诟病的,使用过的人都知道,直观的感觉就是配置复杂、臃肿、难用、不易理解,从官方关于 Camera 的 API 迭代路线可以看出官方也在尝试着不断改进开发者关于Camera的使用体验&#…

ChatGPT编程

ChatGPT问答 问题一:如何合理分配时间问题二:以下是提高工作效率的建议:问题三:如何培养兴趣问题四:软件和硬件谁重要问题五: 设计模式如何熟练运用问题六:C语言编程冒泡排序 问题一:如何合理分配时间 这里…

Java实训第八天——2023.6.14

文章目录 一、vue的环境搭建:二、文本数据绑定三、属性数据绑定四、事件绑定五、案例1——全选/全不选六、案例2——切换图片主要内容: v-if 、v-show指令 七、表单数据绑定八、综合练习总结步骤: 一、vue的环境搭建: 官方文档&a…

Mysql数据库中的约束、用户管理与授权

文章目录 一、Mysql中常见的约束总结 二、数据表高级操作2.1克隆表,将数据表的数据记录生成到新的表中2.2清空表,删除表内的所有数据2.3创建临时表2.4创建外键约束,保证数据的完整性和一致性。 三、数据库用户管理3.1新建用户3.2查看用户信息…

《设计模式》之适配器模式

文章目录 1、定义2、动机3、应用场景4、类结构5、优缺点6、总结7、代码实现(C) 1、定义 把一个类的接口转换成客户端所期待的另一种接口,从而使原接口不匹配而无法再一起工作的两个类能在一起工作。 2、动机 在软件系统中,由于应用环境的变化&#xf…

Spring源码解密--事务篇

文章目录 一、事务的实现方式1、JDBC2、Spring基于xml配置编程式事务声明式事务 二、源码设计1、TransactionManager1)TransactionManager2)PlatformTransactionManager3)ReactiveTransactionManager 2、TransactionDefinition3、Transaction…