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

上一节用单带图灵机模拟了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-多带图灵机模拟)