内容简介
随着计算机科学曰趋成熟并走向规范化,作为其甚础的
计算理论的重要性也更加突出。作者根据本书第一版出版后
使用中教师和学生的反馈意见和想法以及计算机科学的最新
发展进行了修订。本书既讲述了经典的计算理论,又介绍了
现代计算理论。全书共7章:1集、关系与语言,2有限自动
机,3上下文无关文法语言,4.图灵机,5不可决定性,6计算
复杂性,7.NP完全问题。本书适合于计算机系作本科生教材
,也是一本难得的有关计算理论的参考书。
《计算理论基础》是一本深入探讨计算科学核心原理的著作。本书旨在为读者构建一个坚实的理论框架,理解“什么是可计算的”以及“计算的本质界限”等根本性问题。我们将从最基础的数学模型出发,逐步揭示计算的强大之处以及其固有的局限性。 第一部分:形式语言与自动机 本部分将带领读者走进形式语言的世界,这是理解计算机制的基石。我们将从最简单的字母表和字符串开始,构建各种类型的语言。 字母表与字符串: 我们将首先定义“字母表”(Alphabet)的概念,它是一组有限的符号的集合,例如 {a, b, c}。接着,基于字母表,我们可以构建“字符串”(String),即字母表中的符号排列组合而成的序列。空串(ε)作为一种特殊的字符串,也将被引入。 语言: 语言被定义为字母表符号组成的字符串的集合。我们会区分几种重要的语言类型,例如: 有限语言 (Finite Languages): 仅包含有限数量字符串的语言。 无限语言 (Infinite Languages): 包含无限数量字符串的语言。 正则语言 (Regular Languages): 这是我们重点关注的语言类型,它们拥有简洁的表达能力,并且可以用非常有限的计算模型来识别。我们将深入探讨正则语言的定义、性质以及如何构造它们。 形式语言的构造方法: 为了描述和生成这些语言,我们将引入多种形式化的方法: 正则表达式 (Regular Expressions): 这是一种强大的工具,用一种紧凑的符号表示法来描述正则语言。我们将学习正则表达式的各种运算符,如连接(concatenation)、并集(union)、闭包(Kleene star)等,并掌握如何将给定的正则表达式转化为相应的语言,以及如何将给定的正则语言表示为正则表达式。 文法 (Grammars): 文法提供了一种生成字符串的规则系统。我们将介绍不同类型的文法,特别关注乔姆斯基范式 (Chomsky Normal Form),这是一种用于简化和分析文法的标准形式。文法可以看作是描述语言结构的一种方式。 有限自动机 (Finite Automata, FA): 这是识别正则语言的计算模型。我们将详细介绍两种主要的有限自动机: 确定性有限自动机 (Deterministic Finite Automata, DFA): 在任何给定状态下,对于每一个输入符号,都只有一个明确的下一个状态。我们将学习DFA的定义、状态转换图,以及它们如何工作来接受或拒绝一个字符串。 非确定性有限自动机 (Nondeterministic Finite Automata, NFA): 在某些状态下,对于一个输入符号,可能存在多个可能的下一个状态,甚至可以在不消耗输入符号的情况下转换状态(ε-transitions)。我们将证明NFA和DFA的等价性,即任何NFA都可以转化为一个等价的DFA,反之亦然。 有限自动机的应用: finite automata在文本编辑器中的查找/替换功能,编译器中的词法分析,以及网络协议的设计等方面都有广泛应用。 正则语言的性质和判定: 我们将深入研究正则语言的封闭性(closure properties),例如,如果L1和L2是正则语言,那么它们的并集、交集、差集、连接以及Kleene闭包是否也一定是正则语言。此外,我们将学习如何判断一个给定的语言是否是正则语言,例如通过泵引理 (Pumping Lemma for Regular Languages)。泵引理是证明一个语言不是正则语言的强大工具。 第二部分:上下文无关语言与下推自动机 在本部分,我们将把目光投向更复杂的语言类型——上下文无关语言,以及与之对应的计算模型——下推自动机。 上下文无关文法 (Context-Free Grammars, CFG): CFG的产生式规则形式为 A → β,其中A是一个非终结符,β是终结符和非终结符组成的串。这类文法非常适合描述许多编程语言的语法结构。我们将学习如何构造CFG来生成特定的语言,以及如何通过派生 (Derivations) 和 语法分析树 (Parse Trees) 来理解语言的结构。 二义性 (Ambiguity): 一个文法是二义的,如果存在至少一个字符串可以由该文法生成出多棵不同的语法分析树。二义性会导致语法分析上的困难,因此我们也会讨论如何识别和消除二义性。 乔姆斯基范式 (Chomsky Normal Form, CNF) 和 Griebach范式 (Griebach Normal Form, GNF): 我们将介绍这两种重要的范式,它们为上下文无关文法的分析和转换提供了标准化的框架。 下推自动机 (Pushdown Automata, PDA): PDA是在有限自动机的基础上增加了一个栈(stack)的计算模型。栈是一种后进先出(LIFO)的数据结构,它允许PDA存储和检索信息,从而能够识别比正则语言更广泛的语言。 PDA的定义和操作: PDA的转移函数依赖于当前状态、输入符号以及栈顶符号。我们将详细解释PDA的工作原理,包括如何利用栈来匹配成对的符号,如括号。 DPDA与NPDA: 类似于有限自动机,PDA也有确定性(DPDA)和非确定性(NPDA)之分。我们将证明NPDA和CFG是等价的,即任何NPDA都可以转化为一个等价的CFG,反之亦然。然而,DPDA只能识别确定性上下文无关语言 (Deterministic Context-Free Languages, DCFL),这是一个比上下文无关语言更小的类别。 CFG与DPDA的区别: 我们将通过例子说明,并非所有的上下文无关语言都可以被DPDA识别。 上下文无关语言的性质和判定: 类似于正则语言,我们将研究上下文无关语言的封闭性,并学习如何利用泵引理 (Pumping Lemma for Context-Free Languages) 来证明一个语言不是上下文无关语言。 第三部分:图灵机与可计算性 本部分将引入计算理论中最核心、最强大的模型——图灵机,并由此引申出可计算性的概念。 图灵机 (Turing Machine, TM): 图灵机是一个抽象的计算模型,由一个无限长的纸带、一个读写头、一个状态寄存器和一套有限的转移规则组成。尽管其结构简单,但图灵机被普遍认为是能够执行任何“算法”的通用模型,即丘奇-图灵论题 (Church-Turing Thesis)。 图灵机的定义和变种: 我们将详细描述图灵机的构成要素和工作方式,包括其转移函数如何指示读写头移动、写入符号以及改变状态。同时,我们也会介绍图灵机的几种等价变种,如多带图灵机、非确定性图灵机等,并证明它们与单带确定性图灵机在计算能力上是等价的。 图灵机的计算能力: 图灵机能够识别的语言称为递归可枚举语言 (Recursively Enumerable Languages, RE)。 可计算性 (Computability): 一个问题如果存在一个算法(即一个图灵机)可以在有限的时间内解决它,那么这个问题就被认为是“可计算的”。 可判定性 (Decidability): 一个语言是“可判定的”,如果存在一个图灵机能够对输入字符串的任意一个,在有限时间内停止并判断该字符串是否属于该语言。可判定语言是递归可枚举语言的一个真子集。 不可判定性 (Undecidability): 并非所有问题都是可计算的。我们将介绍一些著名的不可判定问题,其中最核心的是停机问题 (Halting Problem)。停机问题是:“给定任意一个图灵机程序和它的输入,判断该程序是否会在有限步内停止运行。”我们将会通过反证法 (Proof by Contradiction) 严格证明停机问题是不可判定的。 其他不可判定问题: 除了停机问题,我们还会探讨其他重要的不可判定问题,例如图灵机的等价性问题 (Equivalence Problem for Turing Machines),图灵机是否接受空串的问题 (Acceptance of Empty String Problem for Turing Machines) 等。这些问题的不可判定性深刻地揭示了计算的内在局限性。 可重现性 (Recursively Enumerable) 和 可判定性 (Decidable) 语言的性质: 我们将研究这些语言类的封闭性,并学习如何通过归约 (Reduction) 的方法来证明某些问题的不可判定性。如果问题A可以归约到不可判定的问题B,那么问题A也是不可判定的。 第四部分:计算的复杂度 在理解了什么问题是可计算的之后,我们自然会进一步关注“如何高效地计算”。本部分将介绍计算复杂性理论,研究解决问题的资源消耗。 复杂度类 (Complexity Classes): 我们将定义一些基本的复杂度类,例如: P 类 (Polynomial Time): 指那些可以在多项式时间内被确定性图灵机解决的问题。这是我们认为“高效可解”的问题的集合。 NP 类 (Nondeterministic Polynomial Time): 指那些可以在多项式时间内被非确定性图灵机验证一个解的问题。换句话说,如果一个问题的解存在,那么非确定性图灵机可以在多项式时间内找到并验证它。 NP-完全问题 (NP-Complete Problems): NP-完全问题是NP类中最“困难”的一类问题。任何一个NP类问题都可以被“多项式时间归约”到任何一个NP-完全问题。著名的NP-完全问题包括 旅行商问题 (Traveling Salesperson Problem, TSP), 布尔可满足性问题 (Boolean Satisfiability Problem, SAT), 图着色问题 (Graph Coloring) 等。 P vs NP 问题: 这是计算机科学中最著名的未解之谜。P=NP意味着任何可以在多项式时间内被验证解的问题,都可以在多项式时间内被解决。如果P≠NP,那么就存在一些问题,它们的解可以被快速验证,但却无法被快速解决。 其他复杂度类: 除了P和NP,我们还会简要介绍其他重要的复杂度类,如 co-NP, PSPACE, EXPTIME 等,并探讨它们之间的关系。 时间复杂度 (Time Complexity) 与空间复杂度 (Space Complexity): 我们将学习如何使用渐进记号(如大O记号)来分析算法的时间和空间需求,从而对算法的效率进行量化评估。 总结与展望 《计算理论基础》将通过严谨的数学定义、清晰的逻辑推理以及丰富的实例,引导读者领略计算科学的宏观图景。本书不仅是理论计算机科学的入门读物,更是为理解算法设计、程序语言理论、人工智能等领域奠定坚实基础的必修课程。通过对计算模型、可计算性以及计算复杂性的深入剖析,读者将深刻理解计算能力的边界,以及在这些边界内如何更有效地进行计算,从而为进一步的学习和研究打下坚实的基础。本书的目的是让读者不仅知其然,更知其所以然,真正掌握计算的精髓。