《计算复杂性:现代方法》——1.2 图灵机

1.2 图灵机\

演草纸

演草纸包含k条带,每条带均由单向无限延伸的很多单元构成,每个单元能够存储称为机器的字母表的有限集Γ中的一个符号。每条带均有一个带头,它具有在带上每次读或写一个符号的能力。机器的计算划分为一系列离散的时间步骤,带头在每个步骤中能够向左或向右移动一个单元。

机器的第一条带是输入带,其带头只能从该带上读取符号而不能写符号,因此这是一条只读带。另外的k-1条读写带称为工作带,其中最后一条带是输出带,机器在计算终止前把最终计算结果写在输出带上。

图灵机还允许使用随机访问存储器。然而,已经证明,图灵机的这种变形与标准的图灵机具有相同的计算能力(参见习题1.9)。

有限操作/规则集

图灵机有有限种状态,表示为Q。机器有一个“寄存器”,它能够在任何时刻记录机器处于Q中的何种“状态”。状态确定了机器在下一个计算步骤要采取的动作,包括:(1)直接读取k个带头所在存储单元的符号;(2)在k-1条读写带上,将带头所在存储单元的符号替换为新的符号(也可以通过再次写下原来的符号而不改变带);(3)修改寄存器使其记录来自有限集Q中的另一种状态(状态也可以保持不变,这只需选择与之前相同的状态);(4)将每个带头向左或向右移动一个单元(或保持不动)。

图灵机可以看成是现代计算机的简化,它的带是计算机的内存,而转移函数和寄存器则是计算机的中央处理器(CPU)。虽然如此,但最好还是将图灵机视为描述算法的一种简单的形式化方法。尽管描述算法的最佳方法是用白话,但这种形式化的描述方法将有助于对算法的数学分析(与此类似,用程序设计语言描述算法则是为了在计算机上执行算法)。

形式定义

1.将输入复制到读写工作带上;

2.将输入带带头移动到输入的开始位置;

3.输入带带头向右移动,而工作带带头向左移动。如果机器在带头移动过程的任何时刻发现了两个不同的值,则停机并输出0。

4.停机并输出1。

显然,完整地描述一个图灵机非常繁琐,但却并不是总能提供更多的信息。尽管如此,你自己构造一两个完整的图灵机也是十分有益的(见习题1.1)。本书其余部分将不再像上例一样给出每个图灵机的每个细节,而将在更高的层次上描述图灵机。对于具备了部分编程经验的读者,例1.2将使他们(至少在原理上)了解到如何构造图灵机来求解通过编程能解决的各种计算任务。

1.2.1 图灵机的表达能力

我们的第一印象是,图灵机是否概括了关于计算的直觉概念还不甚明了。读者最好能自己做一些简单的练习14,比如将加法和乘法的标准算法用图灵机表示出来以完成相应的函数计算(参见习题1.1),这必将大有裨益。做完这样的练习,就可以考虑下面的例子,把你用熟悉的编程语言编写的程序转换为图灵机。(反之,大多数编程语言也能模拟图灵机。)

例1.2(用图灵机模拟一般编程语言) 本例需要关于计算的一些背景知识。我们概略地说明如何把用熟悉的编程语言(如C和Java)编写的程序转换为等价的图灵机。首先,用编程语言编写的程序可以(用编译技术)翻译成用机器语言表示的程序,也就是一个指令序列,每个指令均是如下的几种简单操作之一:(a)从内存读取数据放入一个寄存器中,寄存器的个数是有限的;(b)把某个寄存器中的数据写入内存;(c)将某两个寄存器的值相加后将结果存入第三个寄存器;(d)将某两个寄存器的值相乘后将结果存入第三个寄存器。所有这些操作均可以很容易地被图灵机模拟。内存和寄存器可以实现为图灵机的带,而指令则实现为图灵机的转移函数。例如,不难实现将两数相加或相乘的图灵机。2带图灵机可以用来模拟计算机内存,它用一条带表示被模拟的内存,另一条带则用来实现二进制到一进制的转换。这样,对每个用二进制表示的数i,图灵机可以借助第二条带将i转换成一进制,再据此读取或修改第一条带上的第i个位置的值。我们将上述过程的细节留作习题1.8。

练习1.10要求为定制的程序设计语言严格地证明上述模拟。

时间: 2024-09-25 18:38:03

《计算复杂性:现代方法》——1.2 图灵机的相关文章

《计算复杂性:现代方法》——导读

前 言 计算复杂性理论在过去三十多年中发展迅速.自1990年以来取得的出人意料的结果和基础性的结果本身就可以写出一部书.这些结果涉及的领域非常广泛,包括:经典复杂性类的概率型新定义(IP=PSPACE和各种PCP定理)以及它们在近似算法中的应用,肖尔(Shor)为量子计算机设计的整数因数分解算法,对人们目前处理著名的P?=NP问题 译文用"P?=NP"来表示原文中的"P versus NP".--译者注的各种方法为什么未能获得成功的理解,去随机化理论和基于计算难

《计算复杂性:现代方法》——1.5 不可计算性简介

1.5 不可计算性简介 下面的事情看起来似乎很"显然":只要时间充分,任何函数均是可被计算的.然而,这已被证明是错误的.因为,存在这样的函数,它们在无穷步骤内不能被计算!本节简要介绍这一事实和由此引出的学科分支.21尽管严格地讲不可计算性对复杂性而言不是必需的,但它却构成了复杂性的知识背景. 下面的定理证明了不可计算函数的存在性.(事实上,该定理证明了值域为{0,1}的不可计算函数(即语言)的存在性.值域为{0,1}的不可计算函数也就是众所周知的不可判定语言.)定理的证明用到了对角线方

《计算复杂性:现代方法》——1.6 类P

1.6 类P 1.6.1 为什么模型选择无关紧要 我们用图灵机定义"可计算"语言的各种复杂性类及类P.如果选用其他计算模型,这些类会有区别吗?在发现了计算但采用其他模型而不是图灵机作为计算模型的高等外星人眼里,这些类会有区别吗? 我们已经遇到图灵机模型的各种变形,用其中最弱的模型来模拟最强的模型将导致运行时间平方增加.因此,作为可计算问题的集合,多项式时间在这些变形上是一样的. 在图灵和邱奇的工作发表之后的最初几十年中,很多其他的计算模型被发现,其中有些模型十分怪异.当时人们很容易地就

《计算复杂性:现代方法》——2.7 深入理解P、NP及其他复杂性类

2.7 深入理解P.NP及其他复杂性类 2.7.1 NP的哲学意义 2.7.2 NP与数学证明 2.7.3 如果P=NP会怎样 如果P=NP--具体地讲,如果像3SAT这样的一个NP完全问题存在二次时间的高效算法--则世界很可能会变成一个计算乌托邦.数学家将会被高效的证明发现程序取代(该事实在哥德尔1956年的信中就曾被指出,并且20年后又重新被指出).一般而言,对于答案能够被高效地验证(或正确性具有短证明)的任何搜索问题,我们将能够在多项式时间内高效地找到答案或短证明.人工智能(AI)软件将

《计算复杂性:现代方法》——第一部分 基本复杂性类 第1章 计算模型——为什么模型选择无关紧要 1.1 计算的建模:你真正需要了解的内容

第一部分 基本复杂性类 第1章 计算模型--为什么模型选择无关紧要 初看起来,为计算建立数学模型可谓难上加难.这是由于,历史上人类在解决各种计算任务的过程中用尽了各种各样的方法--从直觉和灵感到算盘或计算尺,再到现代的计算机.此外,自然界中其他生物或系统也时刻需要处理各种计算任务,而它们的解决之道也是纷乱繁杂.怎样才能找出一个能抓住这些计算方法共性的简洁的数学模型呢?如果再考虑到本书要关注的计算效率问题,则建模问题就更加无从下手了.考虑计算效率问题似乎必须小心地选择计算模型,因为即便是孩童也知道

《计算复杂性:现代方法》——1.7 定理1.9的证明:O(TlogT)时间的通用模拟

1.7 定理1.9的证明:O(TlogT)时间的通用模拟 本章学习内容 ●存在许多等价方法对计算过程进行数学建模.我们采用标准的图灵机定义.●图灵机可以表示为位串.存在通用图灵机,它可以(代价很小地)模拟任意给定的用位串表示的图灵机.●存在函数不能被任意图灵机计算,不管计算时间多长.停机问题是不可计算的.●类P是由可以被图灵机在多项式时间内求解的所有判定问题构成的.我们称P中的问题是可以被高效求解的.●图灵机定义中(带的数量.字母表大小等)底层结构的选取不是本质的,因为它们不会改变P的定义. 本

《计算复杂性:现代方法》——第2章 NP和NP完全性 2.1 类NP

第2章 NP和NP完全性 如果你曾玩过填字游戏,那你一定知道从头开始游戏远比验证其他人给出的答案难得多.同样,自己动手做数学家庭作业远比阅读和理解老师给的答案难得多.区别在于,寻找填字游戏的答案和解数学题是创造性劳动.验证答案相对容易的原因是其他人已经完成了创造性劳动. 2.1 类NP 现在,我们定义复杂性类NP,由此将"可被高效验证的解"这一直觉概念形式化.在第1章,我们曾说一个问题是"可被高效求解的",如果它可以被图灵机在多项式时间内求解.于是,问题的解是&qu

《计算复杂性:现代方法》——2.4 归约网络

2.4 归约网络 回顾一下第0章中的如何安排晚宴以确保任意一对宾客之间均能和睦相处的问题,例0.1将该问题形式化为如下的语言: 归约的赞誉 虽然多项式时间归约概念(以及它的第一个孪生概念--随机多项式时间归约,将在7.6节给出定义)的提出源于NP完全性理论,然而由此引出的对复杂性理论的理解远远超出了NP完全性本身.如今,复杂性理论和密码学(因而本书的许多章节)的相当一部分工作是利用归约为不同的复杂性理论猜想建立联系.为什么复杂性理论学家均擅长于使用归约,而不擅长于踏踏实实地证明图灵机的下界呢?或

《计算复杂性:现代方法》——1.4 机器的位串表示和通用图灵机

1.4 机器的位串表示和通用图灵机 几乎显而易见的是,图灵机可以表示为位串:这只需将图灵机描写在纸上,再用0,1序列将描写过程编码即可.编码图灵机得到的位串可以作为另一个图灵机的输入.这个简单的观察结果有着十分深刻的内涵,因为它使得软件.硬件和数据之间的区别变得模糊.历史上,该结果曾直接推动人们发明了通用电子计算机.计算机也是一个图灵机,通过在其上加载恰当的程序(或软件),它就能用来自动地求解指定的任意计算任务. 1.4.1 通用图灵机 第一个注意到通用图灵机可能存在的人是图灵(Turing),