模拟图灵机计算过程
第二章(上机):图灵机
1.实验目的
a. 掌握图灵机的概念和基本结构,理解图灵机的基本指令和编码方式;
b. 掌握图灵机的编程方法。
2.题目描述
对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。
1、算法构造
在此论证算法设计中的一些必要的设计依据。
2、算法实现
程序源代码(请写入必要的注释)。
3.图灵机概述
图灵机(TM)是一种重要的计算模型,它由英国数学家A.M.Turing于1936年提出。这个模型很好的描述了计算过程。无数的事实表明,任何算法都可以用一个图灵机来描述,这就是著名的丘奇论题。图灵机在可计算性理论中起着重要作用。可以证明图灵机识别的语言就是0型语言。
Components. Alan Turing sought to describe the most primitive model of a mechanical device that had the same basic capabilities as a human "computer."图灵机The machine consists of the following compone的组成如下图所示:
它由一个状态控制器,一个读写头和一个输入带组成。其中输入带左右端可以无限伸长。带上的每一格恰好有一个字符。开始时,带上从编号为0开始的n个格存放着由有限输入字母表上的字符组成的字符串,第0格及其左边和第n+1格及其右边各格均为空白。空白是一个特殊的带符号,它不属于输入字母表。读写头一次可以在带上读或写一个字符,并可根据指令向左或向右移一格。状态控制器根据当前的状态,读到输入字符并发布指令。指令的内容包括状态转换,在带上的一格写上(更换)字符,以及读写头向左或向右移动一格等。
带子上的无穷多个小格可写、可擦;读写头可沿带子左右移动并在带上读写;每个图灵机有一个状态集Q,其中有一个开始状态和一个结束状态;还有一个符号集Σ={0,1,*};可形式化地描述为:
图灵机是一个七元组M=(Q,T,Σ,δ,q0,B,H) 其中:
Q ---有限的状态集合;
Σ ---有限的带字符集合;
B ---空白符号,B∈Σ;
T ---输入字符集合, T⊆Σ且 B∉T;
δ---下一次动作函数,是从QxΣ到QxΣx{L,R}的映射,即控制器的规则集合
q0 ---初始状态 ,q0 ∈Q;
H ---终止状态集合,H⊆Q.
工作过程:首先从开始状态启动,每次动作都由控制器根据图灵机所处的当前状态和读写头所对准的符号决定下一步动作(或称操作)其中每一步包含三件事。各符号写到读写头当前对准的那个小格内,取代原来的符号。读写头向左或向右转动一格、或不动。一次动作会引起:
(1)控制器改变状态;
(2)在当前扫描到的单元上,重写一个字符取代原来的字符;
(3)读写头左移或右移一个单元;
根据控制器的命令用某个状态(可以是原状态)取代当前的状态,使用图灵机进入一个新的状态。控制器的命令:(状态、符号)→(写符号,移动、状态),当图灵机进入一个结束状态就停机。计算任务宣告完成,带上的内容即为输出结果。
4.图灵机模拟编程
4.1软件开发环境简介
(2)Eclipse 3.2—— Java开发的IDE工具,用于编写图灵机的功能实现类和调用界面
4.2图灵机概要设计
图灵机在扩展二进制位实现(XN*2)的运算指令:
00→00R,
01→10R,
10→01R,
11→100R,
100→111R,
110→01STOP。
4.1.1算法分析
1、读入一串字符串,将字符串转化成二进制;
2、将二进制转化成图灵机扩展的二进制编码;
3,通过图灵机XN*2运算指令输出每一步的运算结果。
4.1.2算法实现
(部分算法如下):
if(N=="11"&&str[i]=="0")//当内态为11,读取的数字为0时,跳出循环
{N="0";
str[i]="1";
break;}}
System.out.print("最终结果为:");
for(i=0;i<str.length;i++)
System.out.print(str[i]);//输出最终结果}
4.1.3流程图
5.调试及测试
5.1调试界面
5.2数据测试
6、体会
在对抽象的图灵机有了初步的认识之后,能将其转换成程序级的图灵机模拟器,立即由对知识的抽象认识提高到了形象具体的理解。本次练习不仅锻炼了自己的编程能力同时对原本觉着高深莫测的图灵机加深了理解。