用Python实现ax²+by的图灵机【形式语言与自动机】
图灵机目录
- 一、图灵机介绍
- 二、设计思想
- 三、转移函数
- 四、程序设计
- 五、运行结果
- 六、实现源码
一、图灵机介绍
这里是图灵机的定义,防止有同学忘记了,就再提一下。
二、设计思想
因为我们是要求做PPT上台演讲的,所以我直接将我的PPT内容选择性地展示出来了。
三、转移函数
因为我只用了一张纸带,所以,需要用到的状态比较多,一共36个状态,手写了一遍,字迹比较潦草,不过不影响思路。
四、程序设计
然后核心就是用字典存储上面的状态转移函数,从q0开始,每次读一个就进行转移,最后计算完后,读头还必须要回到初始位置。这样就模拟出读头在纸带上的移动。
下面用图片描述一下变化状态,为了节省空间,每个字母就是代表有n个1,比如a就表示这里是a个1,以此类推
五、运行结果
计算出10000大概要花费30s,两个原因:1、Python编译速度很慢,C++实现起来肯定会快很多 2、单带计算读头移动次数太多,距离太长,可以改为多带实现,会更快。
六、实现源码
#纸袋初始状态为:@a0x0b0y0000
#输入需要计算的a、x、b、y
a=input('请输入a的值:')
x=input('请输入x的值:')
b=input('请输入b的值:')
y=input('请输入y的值:')
#开始将空格@和1还有0写上纸带,纸袋假设无限长
list=['@']
for i in range(int(a)):list.append('1')
list.append('0')
for i in range(int(x)):list.append('1')
list.append('0')
for i in range(int(b)):list.append('1')
list.append('0')
for i in range(int(y)):list.append('1')
for i in range(4):list.append('0')
for i in range(10000):list.append('@')
#转移函数,用字典存储
dict={'q0,1':'q1,a,R','q1,1':'q1,1,R','q1,0':'q2,0,R','q2,1':'q3,x,R','q3,1':'q3,1,R','q3,0':'q4,0,R','q4,1':'q4,1,R','q4,0':'q5,0,R','q5,1':'q5,1,R','q5,0':'q6,0,R','q6,0':'q7,1,R','q7,0':'q7,0,R','q7,@':'q8,0,L','q8,1':'q8,1,L','q8,0':'q8,0,L','q8,x':'q2,x,R','q6,1':'q6,1,R','q2,0':'q9,0,L','q9,x':'q9,1,L','q9,0':'q9,0,L','q9,1':'q9,1,L','q9,a':'q0,a,R','q0,0':'q10,0,R',#a*x已完成'q10,1':'q11,x,R','q11,1':'q11,1,R','q11,0':'q12,0,R','q12,1':'q12,1,R','q12,0':'q13,0,R','q13,1':'q13,1,R','q13,0':'q14,0,R','q14,1':'q15,c,R','q15,1':'q15,1,R','q15,0':'q16,0,R','q16,0':'q17,1,R','q17,0':'q17,0,R','q17,@':'q18,0,L','q18,0':'q18,0,L','q18,1':'q18,1,L','q18,c':'q14,c,R','q16,1':'q16,1,R','q14,0':'q19,0,L','q19,c':'q19,1,L','q19,0':'q19,0,L','q19,1':'q19,1,L','q19,x':'q10,x,R','q10,0':'q20,0,R',#a*x*x已完成'q20,1':'q21,b,R','q21,1':'q21,1,R','q21,0':'q22,0,R','q22,1':'q23,y,R','q23,1':'q23,1,R','q23,0':'q24,0,R','q24,1':'q24,1,R','q24,0':'q25,0,R','q25,1':'q25,1,R','q25,0':'q26,0,R','q26,0':'q27,1,R','q27,@':'q28,0,L','q28,1':'q28,1,L','q28,0':'q28,0,L','q28,y':'q22,y,R','q26,1':'q26,1,R','q22,0':'q29,0,L','q29,y':'q29,1,L','q29,0':'q29,0,L','q29,1':'q29,1,L','q29,b':'q20,b,R','q20,0':'q30,0,R',#b*y已完成'q30,1':'q30,1,R','q30,0':'q31,0,R','q31,1':'q31,1,R','q31,0':'q32,0,R','q32,1':'q32,1,R','q32,0':'q33,1,R','q33,1':'q33,1,R','q33,0':'q34,0,L','q34,1':'q35,0,L','q35,1':'q35,1,L','q35,0':'q35,0,L','q35,b':'q35,1,L','q35,x':'q35,1,L','q35,a':'q35,1,L','q35,@':'q36,@,R'#a*x*x+b*y已完成}
state='q0'
point=1
while(state!='q36'):#(q0,1)state=state+','+list[point]#1->alist[point]=dict[state].split(',')[1]#L or Rdirection=dict[state].split(',')[2]if direction=='R':point=point+1else:point=point-1#q0->q1state=dict[state].split(',')[0]
count=0
last_index=0
first_index=0
num=0
while(count<6):last_index = last_index + 1if(list[last_index]=='0'):count=count+1if(count==5):first_index=last_index
num=last_index-first_index-1
print("结果为:",num)
只有十分努力,才能看起来毫不费力。
用Python实现ax²+by的图灵机【形式语言与自动机】相关推荐
- 【形式语言与自动机】图灵机
[形式语言与自动机]图灵机 一.图灵机 在经过有限状态机的介绍之后,再来看一种功能更强大的机器. 图灵机基本结构 〉 一条分格的无限长的纸带,每格可容纳一个字符 〉 一个读写头,可以在纸带上移动(可以 ...
- 形式语言与自动机 Part.6 图灵机
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part 3.有限自动机
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.5 上下文无关语言与下推自动机(PDA)
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.1绪论, Part.2 语言与文法
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机及其在NLP中的应用
摘要 形式语言与自动机是计算机科学的理论基础,对于计算机科学与技术专业人才的计算思维能力培养极其重要.本文首先从Chomsky谱系出发,对形式语言的概念和类别进行了阐述,然后按照形式文法与自动机之间的 ...
- 形式语言与自动机学习复述笔记
形式语言与自动机学习复述笔记 文章目录 形式语言与自动机学习复述笔记 本文说明 文法 文法的乔姆斯基分类 有穷自动机 正则语言 正则文法 关系 正则表达式 正则表达式RE->$\epsilon$ ...
- 计算理论 形式语言与自动机_下推式自动机(PDA)| 计算理论
计算理论 形式语言与自动机 Pushdown Automaton (PDA) is a kind of Automaton which comes under the theory of Comput ...
最新文章
- 【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)
- DSO(dsoframer)的接口文档
- python库下载安装报错_Python 各种库的安装
- 解封装(四):avformat_find_stream_info探测获取封装上下文并打印
- C++中,int a = 10的后面的操作
- FL Studio剪辑菜单的使用方法
- 如何使用计算机中的导出,解决方案:如何使用Canon 2525i复印机将文档扫描到计算机中并生成PDF格式?...
- JavaScript学习手册一
- aws saa考试费用是多少?aws saa考试准备多久才能考试?
- 2019年Java春招汇总,技术类校招社招千道面试题,几百份大厂面经(附答案+考点)...
- 计蒜客 青出于蓝胜于蓝 (树状数组 + dfs序)
- Java语言高级(第三部分)异常多线程 ->(个人学习记录笔记)
- [转]拍照怎么搜题?(上)
- 最新爱叶解析接口搭建php网站源码 附4k画质测试效果
- OCR:财务报表识别
- Verilog 流水线设计
- Unity移动应用如何在Bugly上查看崩溃堆栈
- matlab三角函数降次,Matlab实验-传递函数表示方法.ppt
- Dependencies for Graphs 阅读笔记
- 【React】 详解下一代开源混合应用框架Reapp
热门文章
- Putty打开.pem加密的服务器
- php pdf添加水印图片,php pdf添加水印(中文水印,图片水印)
- 这个是我学习的所有sql语句的写法
- 头的各个部位示意图_图解圆锥破碎机润滑油路,7个主要润滑部位特点分析
- 全球计算机工程专业研究生排名,美国计算机工程专业研究生前100排名
- oneproxy mysql_Mysql 中间件 oneProxy总结
- mysql pdo 获取最后一条sql_一条sql语句的执行过程-mysql
- React 从入门到进阶之路(二)
- bzoj 3028 食物——生成函数
- C语言 · 8皇后问题改编