分析算法可以给人带来两方面的快乐。其一,人们可以尽享优雅计算过程中所蕴含的让人沉 醉的数学模式;其二,我们所学到的理论知识可以让自己更好更快地完成工作,这无疑是最实 际的好处。

尽管数学模型只是对真实世界的一种理想化近似,但它对所有的科学活动而言都可谓是一剂 灵丹妙药。在计算机科学中,数学模型往往可以精确地描述计算机程序所创造的世界,数学模 型的重要性也因此大大增加了。我想,这也是为什么我在读研究生时会沉迷于算法分析,以至 于这成为迄今为止我的主要工作。

但直到今天,算法分析在很大程度上还是局限在相关专业的研究生和科研人员的圈子里。算 法分析的概念既不晦涩也不复杂,但确实比较新,所以相关概念的学习和使用都还需要一些时间才能成熟。

算法分析里的数学看不懂?那么《算法分析导论(第2版)》就是解决这个问题的一本书。

算法分析里面的数学看不懂?_计算机科学

本书的主要目的是介绍算法的数学分析中涉及的主要技术,涵盖的内容来自经典的数学和计 算机科学领域,包括来自数学领域的离散数学、初等实分析和组合数学,来自计算机科学领域 的算法和数据结构等。本书的重点是平均情况或概率性分析,对最差情况或复杂性分析所需的 基本数学工具也有所涉及。

本书主要用作高阶算法分析课程的教科书。书中涵盖了计算机专业学生所需离散数学的基本 技术、组合学和重要离散结构的基本属性等内容,因此本书也可以用在计算机专业的离散数学 课程中。通常此类课程所涵盖的内容都比较广泛,很多教师会用自己的方法来选取其中的一部 分内容教给学生,因此本书还可以用于给数学和应用数学专业的学生介绍计算机科学中与算法 和数据结构有关的基本原理。

如读者有大学一二年级或与之同等的数学基础,学习过组合学和离散数学,以及实分析、数 值方法和基本数论方面的课程,将有助于理解本书中的内容(有些内容跟本书是交叉的)。本书 虽会涉及这些领域,但只会对必要的内容做介绍。我们会列出参考资料供想进一步学习的读者 参考。

读者需要拥有一到两个学期大学水平的编程经验,包括了解基本数据结构。我们不会涉及编 程和具体实现的问题,但算法和数据结构是我们的核心。同数学方面的基础知识一样,在本书 中我们会简要介绍基本的信息,同时列出标准教材和知识来源供读者参考。

如何使用这本书

本书读者在数学和计算机科学方面的知识储备肯定是不一样的。所以,读者要注意本书的结 构:全书共9章,第1章是导论,介绍算法分析,第2~5章介绍数学方法,最后的4章是组合 结构及其在算法分析中的应用。具体如下:

导论

第1章 算法分析 数学方法

第2章递归关系 第3章母函数

第4章渐近逼近 第5章 分析组合

组合结构及其在算法分析中的应用

第 6 章 树

第 7 章 排 列

第8章字符串与字典树 第9章 单词与映射

第1章介绍全书的主要内容,帮助读者理解本书的基本目标以及其余各章的目的。第2~4 章涵盖了离散数学中的方法,重点是基本概念和技术。第5章是一个转折点,其中涵盖了分析 组合学的内容。计算机和计算模型的出现带来了很多新问题,这些问题往往涉及大型的离散结 构。分析组合学就是研究这些离散结构以解决新出现的问题的。第6~9章则回到了计算机科学, 内容涵盖了各种组合结构的属性、它们与基本算法的关系以及分析结果。

我们试图让本书是自包含的,本书的组织结构可以让教师很方便地根据学生和教师自己的背 景及经验选取要重点讲解的部分。一种比较偏数学的教学方案是重点讲解本书第2~5章的理论 和证明,然后过渡到第6~9章的相关应用。另一种比较偏计算机科学的方案是简要介绍第2~5 章的数学工具,将重点放在第6~9章与算法有关的内容上。但我们的根本目标还是要让绝大部分的学生能通过本书学习到数学和计算机科学的新知识。

本书还罗列了很多参考资料以及数百个习题,鼓励读者去研究原始材料,以便更深入地研究 本书中的内容。根据我们的教学经验,教师可以通过计算实验室和家庭作业,灵活地组织授课 和阅读材料。本书的内容为学生深入学习诸如Mathematica 、Maple或 Sage 之类的符号计算系统 提供了一个很好的框架。更重要的是,对学生而言,通过比较数学研究结果和实际测试结果得 出的结论是有重要价值的,不可忽略。