码迷,mamicode.com
首页 > 其他好文 > 详细

计算复杂性学习2-多带图灵机模拟

时间:2016-05-13 03:38:22      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:

上一节用单带图灵机模拟了PAL,其实可以用一种称为多带的图灵机来模拟,就像第一篇文章中介绍的那样,多带图灵机是具有多个读写头的图灵机。

一个k可以定义为一个四元组M=(K,Σ,δ,s),其中K,Σ,δ和普通图灵机一样,δ是一个必须反映多带复杂的程序。直观地,和以前一样,δ决定下一个状态,也决定每一串的覆写字符,并通过当前状态和每一根带上的当前字符决定读写头的方向。形式化地,δ是从K×Σ?K{h,"yes","no"}×(Σ×{,,?})k的函数。直观地,δ(q,σ1,...σk)=(p,ρ1,D1,...ρk,Dk)意味着,若M在状态q,并且第一条带上的图写头是σ1,第二条是σ2等,那么下一步的状态是p,并且第一个读写头的将写ρ1,并且按照D1所示的方向移动,其它读写头也是如此,停机时输出可以从最后的第k条带上字符串读出。

我们用一个3带图灵机(即输入带,工作带,输出带)模拟PAL和字母表{?,,0,1},它如下进行操作:
1.将输入复制到读写工作带上;
2.将输入带头移动到输入的开始位置;
3.输入带带头向右移动,而工作带带头向左移动。如果机器在带头移动过程中的任何时刻发现了两个不同的值,则停机输出0。
4.停机并输出1。

下面用更形式化的方法描述改图灵机。图灵机有5种状态,{qstart,qcopy,qleft,qright,qtest,qhalt},其转移函数的定义如下:
1、在开始状态qstart上:输入带带头向右移动,在工作带上写下开始符号,?之后,工作带带头向右移动,机器状态变成qcopy
2、在qcopy状态:qcopy,如果从输入带上读到的字符不是空白符号,则输入带和工作带一起向右移动,将输入带的字符依次拷贝到工作带上,机器状态为qcopy
如果从输入带读到的字符是空白符号,则输入带带头向左移动,工作带带头停留当前位置(不覆写字符),机器进入状态qleft
3、在状态qleft
如果从输入带带头读到的字符不是开始字符?,则输入带带头向左移动,工作带带头仍停留在当前位置, 机器停留在qleft状态下;
如果从输入带带头读到的字符是开始字符?,则输入带带头向移动,工作做带带头向左移动(不覆写),机器进入qtest
4:在状态qtest:如果输入带和工作带读到的符号相同,则输入带带向右移动,工作带带头向左移动,机器状态为qtest
如果输入带和工作带读到的符号不同,输出带写0,机器进入qhalt;如果到最后输入带移动到,工作带移动到?,说明是PAL,输出带输出1,机器进入qhalt

当然可以改进以上步骤,模拟方法也不是唯一的,一步一步的分析图灵机的过程比较繁琐,但是更能加深对图灵机工作的过程。下一节单带图灵机和多带图灵机结合在一起讨论。

计算复杂性学习2-多带图灵机模拟

标签:

原文地址:http://blog.csdn.net/niujiabinbin/article/details/51336808

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!