图灵机开发说明文档

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

典型图灵机的Java编程示例

一图灵机概述

图灵机(TM)是一种重要的计算模型,它由英国数学家A.M.Turing于1936年提出。这个模型很好的描述了计算过程。无数的事实表明,任何算法都可以用一个图灵机来描述,这就是著名的丘奇论题。图灵机在可计算性理论中起着重要作用。可以证明图灵机识别的语言就是0型语言。

图灵机的组成如下图所示:

它由一个状态控制器,一个读写头和一个输入带组成。其中输入带左右端可以无限伸长。带上的每一格恰好有一个字符。开始时,带上从编号为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)读写头左移或右移一个单元;

根据控制器的命令用某个状态(可以是原状态)取代当前的状态,使用图灵机进入一个新的状态。控制器的命令:(状态、符号)→(写符号,移动、状态),当图灵机进入一个结束状态就停机。计算任务宣告完成,带上的内容即为输出结果。

二图灵机模拟器编程

1 软件开发环境简介

(1)Java JDK —— Java开发的底层支持工具

(2)Eclipse 3.2—— Java开发的IDE工具,用于编写图灵机的功能实现类和调用界面2 图灵机概要设计

首先以下面的例子剖析一下设计图灵机的算法思想

2.1 含有同等数量a和b的字符串识别器

分析: 最初,图灵机M的带上已有字符a..b..a,前后都跟无限多个空白符#, 如下图(a),M开始动作的第一步先读到最左边的第一个a(或b),并改写为X,

如下图(b).然后右移去读最左边的第一个b(或a),并改写为X,

如下图(c).又左移当发现最边的X时,再看紧接着X之后是否为a(或b),若为a(或b),将其改写为X,然后再右移找X,若紧接X之后是b(或a),又将其改写为X.如此反复进行.

图灵机M按以上反复动作过程中,会出现以下情况:

(1)当找a(b)时,如果不再有a(b),M应转向找b(a),如果还能找到b(a),说明b(a)的个数多于a(b)的个数,则M停止,表示不接受. 如果找不到b(a),说明a(b)与b(a)的个数相同,M应该进入终止状态.表示接受.

(2)当找b(a)时,出现空白符#,说明a(b)的个数多于b(a)的个数,M停止,不接受.

通过上面的分析,可构造图灵机M=(Q,T,Σ,δ,q0,#,F),其中:

Q ={q0,q1,q2,q3,q4} T = {a,b}

Σ={a,b,X,#}; F ={q4}

δ函数定义如下:

δ(q0,a)=(q1,X,R) δ(q2,a)=(q2,a,L)

δ(q0,X)=(q3,X,R) δ(q2,X)=(q0,X,R)

δ(q1,a)=(q1,a,R) δ(q2,X)=(q2,X,L)

δ(q1,b)=(q2,X,L) δ(q3,X)=(q3,X,R)

δ(q1,X)=(q1,X,R) δ(q3,#)=(q4,#,R)

当M接受句子aabb时,其动作过程用格局表示为:

q0aabb┠Xq1abb 所使用的函数δ(q0,a)=(q1,X,R)

┠Xaq1bb 所使用的函数δ(q1,a)=(q1,a,R)

┠Xq2aJb 所使用的函数δ(q1,b)=(q2,X,L)

┠q2XaXb 所使用的函数δ(q2,a)=(q2,a,L)

┠Xq0aXb 所使用的函数δ(q2,X)=(q0,X,R)

┠XXq1Xb 所使用的函数δ(q0,a)=(q1,X,R)

┠XXXq1b 所使用的函数δ(q1,X)=(q1,X,R)

┠XXq2XX 所使用的函数δ(q1,b)=(q2,X,L)

┠Xq2XXX 所使用的函数δ(q2,X)=(q2,X,L)

┠XXq0XX 所使用的函数δ(q2,X)=(q0,X,R)

┠XXXq3X 所使用的函数δ(q0,X)=(q3,X,R)

┠XXXXq3 所使用的函数δ(q3,X)=(q3,X,R)

┠XXXXq4 所使用的函数δ(q3,#)=(q4,#,R)

进一步,在设计过程中如何将已规划好的函数及格局等体现在图灵机执行过程中,用下面的例2说明。

2.2 用于计算“x+1”的图灵机。

我们根据图灵机的原理,利用二进制来设计一个专门计算“x+1”的图灵机,要求计算完成时读写头要回归原位。于是我们设计的图灵机为:

状态集合Q:{start, add ,carry, noncarry, overflow, return, halt}

字母表∑:{0,1,*}

初始状态q0:start

停机状态H:halt

规则集合δ:(见表2.1)

相关文档
最新文档